home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / banging_the_metal / qdos / qdos4amiga2 / romsrc / sys / basic1_asm < prev    next >
Text File  |  2000-01-03  |  48KB  |  2,127 lines

  1. */beginfile BASIC1_asm
  2. ; --------------------------------------------------------------
  3. ; BASIC1_asm - The BASIC interpreter
  4. ;        - last modified 06/09/95
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;  ...latest changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8. L04A74:
  9. BAS_STARt:
  10.     bra.s    BEG_BAS
  11. L04A76:
  12. LINK_IN_eprom:
  13.     CMPI.L    #$4AFB0001,(A3)
  14.     BNE.S    L04A9E
  15.     LEA    8(A3),A1     ;Eprom copyright
  16.     JSR    UT_MTEXT(PC)    ;*/undomodify BSR UT_MTEXT
  17.     MOVE.W    4(A3),D0     ;any Basic extensions ?
  18.     BEQ.S    L04A94
  19.     LEA    0(A3,D0.W),A1
  20.     JSR    BP_INIT(PC)    ;*/undomodify BSR BP_INIT
  21. L04A94:
  22.     MOVE.W    6(A3),D0     ;initialization procedure
  23.     BEQ.S    L04A9E
  24.     JSR    0(A3,D0.W)    ;routine must not corrupt
  25.                 ;output channel (a0) or
  26.                 ;start address (a3) and
  27.                 ;must return whilst in
  28.                 ;USER mode
  29. L04A9E:
  30.     RTS
  31. ; --------------------------------------------------------------
  32. OPEN_CON_asd4:
  33.     JSR    UT_CON(PC)    ;*/undomodify BSR UT_CON
  34.                 ;open console window
  35.     MOVE.L    D4,D1        ;restore channel number
  36.                 ;(not ID)
  37.     JMP    STO_CHID(PC)    ;*/undomodify BRA STO_CHID
  38.                 ;store Channel ID as #(D1)
  39. ; --------------------------------------------------------------
  40. ;  Start basic initialization
  41. ; --------------------------------------------------------------
  42. BEG_BAS:
  43.     JSR    L0566E(PC)    ;*/undomodify BSR L0566E
  44.                 ;initialize Basic variable
  45.                 ;area
  46. ; --------------------------------------------------------------
  47. GETPROCS:
  48.     JSR    L06DA2(PC)    ;*/undomodify BSR L06DA2
  49.                 ;BP_INIT for initial
  50.                 ;procedures
  51.     lea    WININIT0(pc),a1
  52.     moveq    #0,d4
  53.     bsr.s    OPEN_CON_asd4    ;init window #0
  54. ; --------------------------------------------------------------
  55. ;*/beginoverlay
  56.  
  57. ;  Link in ROM at $1F400
  58.     move.l    #$1F400,a3
  59.     bsr.s    LINK_IN_eprom
  60. ; --------------------------------------------------------------
  61. ;  Link in other ROMs
  62. CK_C0000:
  63. ; --------------------------------------------------------------
  64.     lea    $C000,a3     ;*/modify MOVE.L #$C0000,A3
  65. L04AC8:
  66.     bsr.s    LINK_IN_eprom
  67.     adda.w    #$100,a3     ;*/modify ADDA.W #$4000,A3
  68.     cmpa.l    #$10000,a3    ;*/cmpa.l #$100000,a3
  69. ;*/endoverlay
  70. ; --------------------------------------------------------------
  71.     blt.s    L04AC8
  72. ; --------------------------------------------------------------
  73. ;  Initialise Copyright window
  74. CPYRIT:
  75.     lea    WININIT1(pc),a1
  76.     moveq    #1,d4
  77.     bsr.s    OPEN_CON_asd4    ;init window #1
  78.     moveq    #-$19,d0     ;copyright message
  79.     JSR    UT_ERR(PC)    ;*/undomodify bsr UT_ERR
  80. ; --------------------------------------------------------------
  81. ;  Initialise F1/F2 window
  82. L04AE4:
  83. F1F2:
  84.     lea    WININIT2(pc),a1
  85.     moveq    #2,d4
  86.     bsr.s    OPEN_CON_asd4    ;init window #2
  87.     moveq    #-$18,d0     ;F1/F2 message
  88.     JSR    UT_ERR(PC)    ;*/undomodify bsr UT_ERR
  89. ; --------------------------------------------------------------
  90. ;  Get a key press
  91. GETMOD:
  92.     moveq    #1,d0
  93.     moveq    #-1,d3        ;timeout
  94.     trap    #3        ;inkey$
  95. ; --------------------------------------------------------------
  96. ;  Sort out mode number
  97.     MOVEQ    #0,D6        ;initially 4 colour mode
  98.     MOVEQ    #0,D7        ;monitor
  99.     moveq    #$20,d5        ;displacement
  100.     subi.b    #$E8,d1        ;F1
  101.     beq.s    INIMON
  102.     subq.b    #$4,d1        ;F2
  103.     bne.s    GETMOD
  104.     moveq    #8,d6
  105.     moveq    #1,d7
  106.     moveq    #$44,d5
  107. ; --------------------------------------------------------------
  108. ;  Set screen mode
  109. INIMON    MOVE.B    D6,D1
  110.     MOVE.B    D7,D2
  111.     MOVEQ    #$10,D0        ;MT.DMODE sets the display
  112.     TRAP    #1        ;mode
  113. ; --------------------------------------------------------------
  114. ;  redefine relevant windows
  115.     lea    WIN_MON0-$08(pc,d5.w),a1
  116.     bsr.s    L04B6E
  117.     movea.l    #$00010001,a0    ;special ID for channel #1
  118.     lea    WIN_MON0-$14(pc,d5.w),a1
  119.     bsr.s    L04B6E
  120.     suba.l    a0,a0        ;special ID for channel #0
  121.     lea    WIN_MON0-$20(pc,d5.w),a1
  122.     bsr.s    L04B6E
  123. ; --------------------------------------------------------------
  124. ;  boot definition
  125.     LEA    BOOT(PC),A0    ;boot-definiton
  126.     BSR.S    L04B46        ;try boot on every device
  127.     BEQ.S    L04B40        ;success
  128.     lea    MDVBOOT(pc),a0    ;try mdv_boot
  129.     BSR.S    L04B46
  130.     bne.s    BAS_WARM     ;failed
  131. L04B40:
  132.     CLR.W    $88(A6)        ;clear line-number
  133.     BRA.S    L04B54
  134. L04B46    MOVEQ    #1,D0        ;try to open boot
  135.     MOVEQ    #-1,D1
  136.     MOVEQ    #0,D3
  137.     TRAP    #2
  138.     TST.L    D0
  139.     RTS
  140. L04B52:
  141. BAS_WARM:
  142.     SUBA.L    A0,A0        ;First input from #0
  143. L04B54:
  144.     MOVE.L    (A6),$04(A6)    ;buffer base -> buffer
  145.                 ;running ptr
  146.     MOVEQ    #0,D7
  147.     MOVEQ    #$7E,D1
  148.     JSR    L04E6A(PC)    ;*/undomodify BSR L04E6A
  149.     MOVE.L    A0,BV_COMCH(A6)    ;Command channel
  150.     LEA    L04BF0(PC),A5
  151.     MOVE.L    A5,-(A7)
  152.     JMP    L04C04(PC)    ;*/undomodify BRA L04C04
  153.                 ;try to execute line or
  154.                 ;prog
  155. L04B6E:
  156.     JMP    L03A02(PC)    ;*/undomodify bra L03A02
  157. ; --------------------------------------------------------------
  158. ;  Monitor mode #0
  159. ; --------------------------------------------------------------
  160. WIN_MON0:
  161.     DC.B    0        ;Border colour
  162.     DC.B    0        ;border with
  163.     DC.B    0        ;paper / strip colour
  164.     DC.B    4        ;ink colour
  165.     DC.W    $200        ;window width
  166.     DC.W    $32        ;window hight
  167.     DC.W    $0        ;X origin
  168.     DC.W    $CE        ;Y origin
  169. ; --------------------------------------------------------------
  170. ;  Monitor mode #1
  171. ; --------------------------------------------------------------
  172. WIN_MON1:
  173.     DC.B    $FF        ;Border colour
  174.     DC.B    1        ;border with
  175.     DC.B    2        ;paper / strip colour
  176.     DC.B    7        ;ink colour
  177.     DC.W    $100        ;window width
  178.     DC.W    $CA        ;window hight
  179.     DC.W    $100        ;X origin
  180.     DC.W    $0        ;Y origin
  181. ; --------------------------------------------------------------
  182. ;  Monitor mode #2
  183. ; --------------------------------------------------------------
  184. WIN_MON2:
  185.     DC.B    $FF        ;Border colour
  186.     DC.B    1        ;border with
  187.     DC.B    7        ;paper / strip colour
  188.     DC.B    2        ;ink colour
  189.     DC.W    $100        ;window width
  190.     DC.W    $CA        ;window hight
  191.     DC.W    $0        ;X origin
  192.     DC.W    $0        ;Y origin
  193. ; --------------------------------------------------------------
  194. ;  TV mode #0
  195. ; --------------------------------------------------------------
  196. WIN_TV0:
  197.     DC.B    0        ;Border colour
  198.     DC.B    0        ;border with
  199.     DC.B    0        ;paper / strip colour
  200.     DC.B    7        ;ink colour
  201.     DC.W    $1C0        ;window width
  202.     DC.W    $28        ;window hight
  203.     DC.W    $20        ;X origin
  204.     DC.W    $D8        ;Y origin
  205. ; --------------------------------------------------------------
  206. ;  TV mode #1
  207. ; --------------------------------------------------------------
  208. WIN_TV1:
  209.     DC.B    0        ;Border colour
  210.     DC.B    0        ;border with
  211.     DC.B    2        ;paper / strip colour
  212.     DC.B    7        ;ink colour
  213.     DC.W    $1C0        ;window width
  214.     DC.W    $C8        ;window hight
  215.     DC.W    $20        ;X origin
  216.     DC.W    $10        ;Y origin
  217. ; --------------------------------------------------------------
  218. ;  TV mode #2
  219. ; --------------------------------------------------------------
  220. WIN_TV2:
  221.     DC.B    0        ;Border colour
  222.     DC.B    0        ;border with
  223.     DC.B    1        ;paper / strip colour
  224.     DC.B    7        ;ink colour
  225.     DC.W    $1C0        ;window width
  226.     DC.W    $C8        ;window hight
  227.     DC.W    $20        ;X origin
  228.     DC.W    $10        ;Y origin
  229. ; --------------------------------------------------------------
  230. ;  initialisation screen #0 for rom extension messages
  231. ; --------------------------------------------------------------
  232. WININIT0:
  233.     DC.B    0        ;Border colour
  234.     DC.B    0        ;border with
  235.     DC.B    0        ;paper / strip colour
  236.     DC.B    4        ;ink colour
  237.     DC.W    $1C0        ;window width
  238.     DC.W    $AA        ;window hight
  239.     DC.W    $20        ;X origin
  240.     DC.W    $20        ;Y origin
  241. ; --------------------------------------------------------------
  242. ;  initialisation screen #1 for copyright message
  243. ; --------------------------------------------------------------
  244. WININIT1:
  245.     DC.B    7        ;Border colour
  246.     DC.B    2        ;border with
  247.     DC.B    2        ;paper / strip colour
  248.     DC.B    7        ;ink colour
  249.     DC.W    $170        ;window width
  250.     DC.W    $E        ;window hight
  251.     DC.W    $48        ;X origin
  252.     DC.W    $EE        ;Y origin
  253. ; --------------------------------------------------------------
  254. ;  initialisation screen #2 for F1/F2 message
  255. ; --------------------------------------------------------------
  256. WININIT2:
  257.     DC.B    4        ;Border colour
  258.     DC.B    4        ;border with
  259.     DC.B    7        ;paper / strip colour
  260.     DC.B    2        ;ink colour
  261.     DC.W    $A8        ;window width
  262.     DC.W    $1C        ;window hight
  263.     DC.W    $AE        ;X origin
  264.     DC.W    $CE        ;Y origin
  265. ; --------------------------------------------------------------
  266. BOOT:
  267.     DC.W    4
  268.     DC.B    'BOOT'
  269. MDVBOOT:
  270.     DC.W    9
  271. ; --------------------------------------------------------------
  272. ;*/beginoverlay
  273.     DC.B    'MDV1_BOOT',0    ;*/undomodify DC.B 'FLP1_BOOT',0
  274. ;*/endoverlay
  275. ; --------------------------------------------------------------
  276. L04BF0    JSR    L0A9BA(PC)    ;*/undomodify BSR L0A9BA
  277.                 ;system command
  278.     LEA    L04BF0(PC),A5    ;address for errors
  279.     MOVE.L    A5,-(A7)
  280. L04BFA    CLR.L    BV_COMCH(A6)    ;Command channel
  281.     MOVEQ    #0,D1
  282.     JSR    L0661E(PC)    ;*/undomodify BSR L0661E
  283. L04C04    CLR.L    BV_SSSAV(A6)    ;Saved sp for
  284.                 ;out/mem to back to
  285.     MOVE.L    (A6),$04(A6)    ;start of pointers ->
  286.                 ;buffer running ptr
  287.     TST.B    BV_AUTO(A6)    ;AUTO/EDIT on ($FF) or off (0)
  288.     BEQ.S    L04C2C
  289.     MOVE.W    BV_EDLIN(A6),D4    ;line # to edit next
  290.     MOVE.W    D4,D6
  291.     SF    BV_PRINT(A6)    ;Print from prtok ($ff)
  292.                 ;or leave in buffer
  293.     JSR    TKN_LIST(PC)    ;*/undomodify BSR TKN_LIST
  294.     MOVE.W    BV_EDINC(A6),D0    ;Increment on edit range
  295.     SNE    BV_AUTO(A6)    ;AUTO/EDIT on ($FF) or off (0)
  296.     ADD.W    D0,BV_EDLIN(A6)    ;line # to edit next
  297. L04C2C    MOVE.L    A0,D0
  298.     JSR    L079C4(PC)    ;*/undomodify BSR L079C4
  299.     BEQ.S    L04C64
  300.     BGT.S    L04C3C
  301.     CMPI.B    #$F6,D0
  302.     BEQ.S    L04C50
  303. L04C3C    SF    BV_AUTO(A6)    ;AUTO/EDIT on ($FF) or off (0)
  304.     JSR    L09B9C(PC)    ;*/undomodify BSR L09B9C
  305.                 ;error report
  306. L04C44    BSR    GET_CH0
  307.     BEQ.S    L04C4E
  308.     MOVEQ    #2,D0        ;IO.CLOSE close channel
  309.     TRAP    #2
  310. L04C4E    BRA.S    L04BFA
  311. L04C50    MOVEQ    #2,D0        ;IO.CLOSE / close MDV1_BOOT
  312.     TRAP    #2
  313.     CLR.L    BV_COMCH(A6)    ;set Command
  314.                 ;channel to 0
  315.     TST.W    BV_NXLIN(A6)    ;line to execute ?
  316.     BLT    L04D6A        ;No
  317.     BRA    L04D9E        ;yes
  318. ; --------------------------------------------------------------
  319. */beginoverlay
  320. L04C64:
  321.     ifd    NoTas
  322. ;
  323.     BSET    #7,BV_BRK(A6)    ;*/mend TAS BV_BRK(A6)
  324.                 ;There has been a
  325.                 ;break (0) or not ($80)
  326.     MOVE.L    A1,D1
  327.     SUB.L    (A6),D1
  328.     SF    $B9(A6)        ;0 => No arrow key
  329.     MOVE.B    -$01(A6,A1.L),D0
  330.     SUBI.B    #$D0,D0
  331.     BCS.S    L04C86
  332.     ST    $B9(A6)        ;FF => down arrow key
  333.     BEQ.S    L04C86
  334.     NEG.B    $B9(A6)        ;*/modify MOVE.B #1,$B9(A6)
  335.                 ;1 => up arrow key
  336.     endc
  337. ;
  338.     ifnd    NoTas
  339. ;
  340.     TAS    BV_BRK(A6)
  341.     MOVE.L    A1,D1
  342.     SUB.L    (A6),D1
  343.     SF    $B9(A6)
  344.     MOVE.B    -$01(A6,A1.L),D0
  345.     SUBI.B    #$D0,D0
  346.     BCS.S    L04C86
  347.     ST    $B9(A6)
  348.     BEQ.S    L04C86
  349.     MOVE.B    #$01,$00B9(A6)
  350. ;
  351.     endc
  352. */endoverlay
  353. ; --------------------------------------------------------------
  354. L04C86:
  355.     SUBQ.W    #1,D1
  356.     BLE    L04C04
  357.     CMPI.B    #$20,-2(A6,A1.L)
  358.     BNE.S    L04C98
  359.     SUBQ.W    #1,A1
  360.     BRA.S    L04C86
  361. L04C98:
  362.     MOVE.B    #$A,-1(A6,A1.L)
  363.     MOVE.L    A1,BV_BFP(A6)    ;buffer running ptr
  364. L04CA2:
  365.     JSR    INI_STCK(PC)    ;*/undomodify BSR INI_STCK
  366. RLOC14    movea.l    #(TB_LIST-ORGN),a2 ;*/modify LEA TB_LIST(PC),A2
  367.     JSR    ANA_SYNX(PC)    ;*/undomodify BSR ANA_SYNX
  368.     BEQ.S    L04CD0
  369.     BLT.S    L04CB8
  370.     JSR    L097DC(PC)    ;*/undomodify BSR L097DC
  371.     BRA.S    L04CA2
  372. L04CB8    ;error handling of direct commands
  373.     TST.L    BV_COMCH(A6)    ;Command channel
  374.     BNE.S    L04CCC
  375.     MOVEQ    #-21,D0        ;Bad line error
  376.     JSR    L09B9C(PC)    ;*/undomodify BSR L09B9C
  377.     SUBQ.L    #1,BV_BFP(A6)    ;buffer running ptr
  378.     BRA    L04C2C        ;edit offending line
  379. L04CCC    ;error handling of direct input other channel than #0
  380.     JSR    COMP_ERR(PC)    ;*/undomodify BSR COMP_ERR
  381. L04CD0    JSR    FMT_LINE(PC)    ;*/undomodify BSR FMT_LINE
  382.     JSR    STO_LINE(PC)    ;*/undomodify BSR STO_LINE
  383.     BRA.S    L04D02        ;error
  384.     SF    BV_SING(A6)    ;Single line execution
  385.                 ;ON ($FF) or OFF (0)
  386.     ST    BV_EDIT(A6)    ;program has been edited
  387.                 ;($ff) or not (0)
  388.     MOVE.L    D0,D5
  389.     BSR.S    GET_CH0
  390.     BNE    L04C04
  391.     MOVEQ    #$02,D1
  392.     JSR    L0661E(PC)    ;*/undomodify BSR L0661E
  393.     BLT.S    L04CF6
  394.     JSR    L08FE6(PC)    ;*/undomodify BSR L08FE6
  395. L04CF6    BRA    L04BFA
  396. GET_CH0    ;get input channel
  397.     MOVEA.L    BV_COMCH(A6),A0    ;Command channel
  398.     MOVE.L    A0,D0
  399.     RTS
  400. L04D02    ;Supervisor for direct commands
  401.     MOVEA.L    BV_TKBAS(A6),A4    ;token list
  402.     MOVE.B    #1,BV_STMNT(A6)    ;current statement on line
  403.     SF    BV_INLIN(A6)    ;Processing inline clause
  404.     ST    BV_CONT(A6)    ;continue ($80) or stop (0)
  405. L04D14    ST    BV_SING(A6)    ;Single line execution
  406.                 ;ON ($FF) or OFF (0)
  407.     CLR.L    BV_LINUM(A6)    ;current line #
  408.     JSR    L0A4BA(PC)    ;*/undomodify BSR L0A4BA
  409.     JSR    L0A8B8(PC)    ;*/undomodify BSR L0A8B8
  410.     BNE    L04C44
  411.     TST.B    BV_COMLN(A6)    ;Command line saved ($ff)
  412.                 ;or not (0)
  413.     BEQ.S    L04D5E
  414.     SUBQ.W    #4,BV_STOPN(A6)    ;which stop number set
  415.     BEQ.S    L04CF6
  416.     BLT.S    L04D14
  417.     MOVEA.L    BV_TKBAS(A6),A0    ;token list
  418.     MOVE.L    BV_TKP(A6),D0    ;token list running ptr
  419.     SUBA.L    A0,A4
  420.     SUB.L    A0,D0
  421.     MOVE.L    D0,D1
  422.     SUBA.L    D0,A7
  423. L04D46    MOVE.W    0(A6,A0.L),(A7)+
  424.     ADDQ.W    #2,A0
  425.     SUBQ.W    #2,D1
  426.     BGT.S    L04D46
  427.     SUBA.L    D0,A7
  428.     MOVE.W    D0,-(A7)
  429.     MOVE.W    A4,-(A7)
  430.     MOVE.B    BV_STMNT(A6),-(A7) ;current statement on line
  431.     MOVE.L    BV_INLIN(A6),-(A7) ;Processing inline clause
  432. L04D5E    TST.W    BV_NXLIN(A6)    ;which line # to start after
  433.     BGE.S    L04D98
  434.     BSR.S    GET_CH0
  435. L04D66    BNE    L04C04
  436. L04D6A    TST.B    BV_COMLN(A6)    ;Command line saved ($ff)
  437.                 ;or not (0)
  438.     BEQ.S    L04CF6
  439.     SF    BV_COMLN(A6)    ;Command line saved ($ff)
  440.                 ;or not (0)
  441.     MOVE.L    (A7)+,BV_INLIN(A6) ;Processing inline clause
  442.     MOVE.B    (A7)+,BV_STMNT(A6) ;current statement on line
  443.     MOVEA.L    BV_TKBAS(A6),A0    ;token list
  444.     MOVEA.L    A0,A4
  445.     ADDA.W    (A7)+,A4
  446.     MOVE.W    (A7)+,D0
  447. L04D86    MOVE.W    (A7)+,0(A6,A0.L)
  448.     ADDQ.W    #2,A0
  449.     SUBQ.W    #2,D0
  450.     BGT.S    L04D86
  451.     MOVE.L    A0,BV_TKP(A6)    ;token list running ptr
  452.     BRA    L04D14
  453. L04D98    ;execution of BASIC progs
  454.     BSR    GET_CH0        ;get channel ID
  455.     BNE.S    L04D66        ;not #0
  456. L04D9E    JSR    L0A4BA(PC)    ;*/undomodify BSR L0A4BA
  457.                 ;init variables and procs
  458.     MOVEA.L    BV_PFBAS(A6),A4    ;program file
  459.     SF    BV_SING(A6)    ;Single line execution
  460.                 ;ON ($FF) or OFF (0)
  461.     CLR.L    BV_LINUM(A6)    ;current line #
  462.     MOVE.B    #1,BV_STMNT(A6)    ;current statement on line
  463.     MOVE.W    BV_NXLIN(A6),D4    ;Which line # to start after
  464.     BEQ.S    L04DD6
  465.     JSR    L09FBE(PC)    ;*/undomodify BSR L09FBE
  466.     BNE    L04BFA
  467.     MOVE.B    BV_NXSTM(A6),D4    ;statement to start after
  468.     BEQ.S    L04DD6
  469.     JSR    L0A96A(PC)    ;*/undomodify BSR L0A96A
  470.                 ;first instruction in line
  471.     JSR    L0A00A(PC)    ;*/undomodify BSR L0A00A
  472. L04DD0    JSR    L0A90C(PC)    ;*/undomodify BSR L0A90C
  473.                 ;execute programm
  474.     BRA.S    L04DDA
  475. L04DD6    JSR    L0A8A8(PC)    ;*/undomodify BSR L0A8A8
  476.                 ;execute programm
  477. L04DDA    BNE    L04BFA        ;error or end
  478.     TST.W    BV_STOPN(A6)    ;which stop number set
  479.                 ;/ system command ?
  480.     BNE    L04D5E        ;no
  481.     BRA.S    L04DD0        ;continue
  482. ; reserve memory for name table entry !!! only once needed !!!
  483. L04DE8:
  484.     JSR    L04E5E(PC)    ;*/undomodify BSR.S L04E5E
  485.                 ;*/undomodify nop
  486.     MOVEA.L    BV_NTP(A6),A2    ;name table running ptr
  487.     ADDQ.L    #8,BV_NTP(A6)
  488.     RTS
  489. ; reserve memory for variables
  490. L04DF6:
  491.     MOVE.L    D1,-(A7)
  492.     ADDQ.L    #7,D1
  493.     ANDI.W    #$FFF8,D1
  494. L04DFE    MOVEA.W    #$72,A0        ;first free space in
  495.                 ;vvtable
  496.     MOVEQ    #$0C,D0        ;MT.ALLOC allocates an area
  497.                 ;in a heap
  498.     TRAP    #1
  499.     TST.L    D0
  500.     BLT.S    L04E0C        ;not enough memory
  501.     BRA.S    L04E26
  502. L04E0C    MOVE.L    D1,-(A7)
  503.     JSR L04E76(PC)        ;*/undomodify MOVEQ #$2C,D2
  504.                 ;*/undomodify BSR.S L04E84
  505.     MOVEA.L    BV_VVP(A6),A0    ;variable values running ptr
  506.     ADD.L    D1,BV_VVP(A6)    ;variable values running ptr
  507.     MOVEA.W    #$72,A1        ;basic variable value area
  508.     MOVEQ    #$0D,D0        ;MT.LNKFR link space back
  509.                 ;into heap
  510.     TRAP    #$01
  511.     MOVE.L    (A7)+,D1
  512.     BRA.S    L04DFE
  513. L04E26    MOVE.L    (A7)+,D1
  514.     RTS
  515. ; table for memory reservation
  516. ; ...changed to improve EPROM initialisation
  517. L04E2A:
  518.     DC.W    $100        ;*/undomodify DC.L $200
  519.     DC.W    $100        ;*/undomodify DC.L $200
  520.     DC.W    $100        ;*/undomodify DC.L $200
  521.     DC.W    $100        ;*/undomodify DC.L $200
  522. ; !!! table above and command below are fuzzy.
  523. ; in all cases same amount of memory is reserved so it can be
  524. ; shortened - instead of first four lines, only move.l #$0100,d1
  525. ; would be sufficient !
  526. L04E32    LEA    L04E2A(PC),A1
  527.     ADD.W    D0,D0
  528.     MOVEQ    #0,D1
  529.     MOVE.W    0(A1,D0.W),D1
  530.     MOVEQ    #$60,D2
  531.     MOVE.L    A7,BV_SSP(A6)    ;system stack
  532.     MOVE.L    A6,D0
  533.     SUB.L    D0,BV_SSP(A6)    ;system stack
  534.     BRA.S    L04E90        ;reserve 256 bytes
  535. L04E4C    MOVEQ    #$20,D1        ;reserve 32 bytes
  536.                 ;arithmetic stack
  537. ; ------- vectored utility BV_CHRIX
  538. BV_CHRIX ;reserve space on arithmetic stack
  539.     MOVEQ    #$58,D2
  540.     BRA.S    L04E90
  541. L04E52    MOVEQ    #$0C,D1        ;12 bytes on stack
  542. L04E54    MOVEQ    #$48,D2
  543.     BRA.S    L04E90
  544. L04E58    MOVEQ    #4,D1        ;reserve 4 bytes
  545. L04E5A    MOVEQ    #$50,D2
  546.     BRA.S    L04E90
  547. L04E5E    MOVEQ    #8,D1
  548. L04E60    MOVEQ    #$1C,D2        ;name table
  549.     BRA.S    L04E84
  550. L04E64    MOVEQ    #$16,D1        ;20 bytes for
  551.     MOVEQ    #$3C,D2        ;return table
  552.     BRA.S    L04E84
  553. L04E6A    MOVEQ    #4,D2        ;buffer
  554.     BRA.S    L04E84
  555. L04E6E    MOVEQ    #$0C,D2        ;token list
  556.     BRA.S    L04E84
  557. L04E72    MOVEQ    #$24,D2        ;Name list
  558.     BRA.S    L04E84
  559. L04E76    MOVEQ    #$2C,D2        ;variable values
  560.     BRA.S    L04E84
  561. L04E7A    MOVEQ    #$34,D2
  562.     BRA.S    L04E84
  563. L04E7E    MOVEQ    #$44,D2
  564.     BRA.S    L04E84
  565. L04E82    MOVEQ    #$14,D2
  566. L04E84    MOVEQ    #0,D0
  567.     MOVE.L    4(A6,D2.L),D3
  568.     SUB.L    0(A6,D2.L),D3
  569.     BRA.S    L04E9A
  570. L04E90    ;reserve memory on base of stack
  571.     MOVEQ    #-1,D0
  572.     MOVE.L    0(A6,D2.L),D3
  573.     SUB.L    -4(A6,D2.L),D3
  574. L04E9A    CMP.L    D1,D3        ;enough memory for
  575.                 ;reservation
  576. L04E9C    BGE.S    L04EE2
  577.     MOVEM.L    A0-A3,-(A7)
  578.     ADDI.L    #$F,D1
  579.     ANDI.W    #$FFF0,D1
  580. L04EAC    MOVE.L    BV_BTP(A6),D3    ;backtrack stack for parser
  581.     SUB.L    BV_LNP(A6),D3    ;line # running ptr
  582.     CMP.L    D1,D3
  583.     BGT.S    L04F14
  584.     MOVEM.L    D0-D2,-(A7)
  585.     MOVEQ    #$16,D0        ;MT.ALBAS allocate BASIC
  586.                 ;program area
  587.     TRAP    #1
  588.     TST.L    D0
  589.     BEQ.S    L04EE4
  590.     MOVE.W    #$12,BV_STOPN(A6) ;which stop number set
  591.     TRAP    #0
  592.     MOVEA.L    BV_SSBAS(A6),A5    ;system stack running ptr
  593.     ADDA.L    A6,A5
  594.     SUBA.L    BV_SSSAV(A6),A5    ;Saved sp for
  595.                 ;out/mem to back to
  596.     SUBQ.W    #4,A5
  597.     MOVE.L    A5,USP
  598.     MOVE.W    #4,SR
  599.     SF    BV_CONT(A6)    ;continue ($80) or stop (0)
  600. L04EE2    RTS
  601. L04EE4    MOVEA.L    BV_BTP(A6),A0    ;backtrack stack for parser
  602.     MOVEA.L    BV_SSBAS(A6),A1    ;system stack running ptr
  603.     LEA    0(A1,D1.L),A2
  604. L04EF0    SUBQ.W    #4,A2
  605.     SUBQ.W    #4,A1
  606.     MOVE.L    0(A6,A1.L),0(A6,A2.L)
  607.     CMPA.L    A0,A1
  608.     BGT.S    L04EF0
  609.     MOVEQ    #$48,D0
  610.     MOVEQ    #$64,D2
  611. L04F02    ADD.L    D1,0(A6,D0.L)
  612.     ADDQ.W    #4,D0
  613.     CMP.L    D2,D0
  614.     BLE.S    L04F02
  615.     ADDA.L    D1,A7
  616.     MOVEM.L    (A7)+,D0-D2
  617.     BRA.S    L04EAC
  618. L04F14    TST.B    D0
  619.     BMI.S    L04F54
  620.     CMPI.L    #$44,D2
  621.     BEQ.S    L04F84
  622.     MOVEA.L    BV_LNP(A6),A1    ;line # running ptr
  623.     MOVEA.L    4(A6,D2.L),A0
  624.     LEA    0(A1,D1.L),A2
  625. L04F2C    SUBQ.W    #4,A1
  626.     SUBQ.W    #4,A2
  627.     MOVE.L    0(A6,A1.L),0(A6,A2.L)
  628.     CMPA.L    A0,A1
  629.     BGT.S    L04F2C
  630.     MOVEQ    #4,D0
  631.     ADD.W    D2,D0
  632.     MOVEQ    #$48,D2
  633.     TST.L    BV_VVFREE(A6)    ;First free space in vv tbl
  634.     BEQ.S    L04F7A
  635.     CMPI.L    #$28,D0
  636.     BGT.S    L04F7A
  637.     ADD.L    D1,BV_VVFREE(A6)    ;First free space in vv tbl
  638.     BRA.S    L04F7A
  639. L04F54    CMPI.L    #$00000048,D2
  640.     BEQ.S    L04F84
  641.     MOVEA.L    -$04(A6,D2.L),A1
  642.     MOVEA.L    BV_BTP(A6),A0    ;backtrack stack for parser
  643.     NEG.L    D1
  644.     LEA    0(A0,D1.L),A2
  645. L04F6A    MOVE.L    0(A6,A0.L),0(A6,A2.L)
  646.     ADDQ.W    #4,A0
  647.     ADDQ.W    #4,A2
  648.     CMPA.L    A1,A0
  649.     BLE.S    L04F6A
  650.     MOVEQ    #$48,D0
  651. L04F7A    ADD.L    D1,0(A6,D0.L)
  652.     ADDQ.W    #4,D0
  653.     CMP.L    D2,D0
  654.     BLT.S    L04F7A
  655. L04F84    MOVEM.L    (A7)+,A0-A3
  656.     RTS
  657. ; ------------------- END OF BV_CHRIX --------------------------
  658. L04F8A    MOVEQ    #$14,D2
  659.     BRA.S    L04FA0
  660. L04F8E    MOVEQ    #$24,D2
  661.     BRA.S    L04FA0
  662. L04F92    MOVEQ    #$1C,D2
  663.     BRA.S    L04FA0
  664. L04F96    MOVEQ    #$2C,D2
  665.     BRA.S    L04FA0
  666. L04F9A    MOVEQ    #$34,D2
  667.     BRA.S    L04FA0
  668. L04F9E    MOVEQ    #$3C,D2
  669. L04FA0    MOVEA.L    $04(A6,D2.L),A1
  670.     MOVE.L    A1,D1
  671.     MOVE.L    0(A6,D2.L),D0
  672.     ADDQ.W    #1,D0
  673.     BCLR    #0,D0
  674.     MOVEA.L    D0,A0
  675.     SUB.L    A0,D1
  676.     BEQ.S    L04FE6
  677. L04FB6    MOVE.L    0(A6,A1.L),0(A6,A0.L)
  678.     ADDQ.W    #4,A1
  679.     ADDQ.W    #4,A0
  680.     CMPA.L    BV_LNP(A6),A1    ;line # running ptr
  681.     BLT.S    L04FB6
  682.     MOVEQ    #$04,D0
  683.     ADD.B    D2,D0
  684.     TST.L    BV_VVFREE(A6)    ;First free space in vv tbl
  685.     BEQ.S    L04FDA
  686.     CMPI.B    #$28,D2
  687.     BGE.S    L04FDA
  688.     SUB.L    D1,BV_VVFREE(A6)    ;First free space in vv tbl
  689. L04FDA    MOVEQ    #$48,D2
  690. L04FDC    SUB.L    D1,0(A6,D0.L)
  691.     ADDQ.B    #4,D0
  692.     CMP.B    D2,D0
  693.     BLT.S    L04FDC
  694. L04FE6    RTS
  695. L04FE8    ADDQ.L    #7,D1
  696.     ANDI.L    #$FFFFFFF8,D1
  697.     BEQ.S    L04FFA
  698.     MOVEA.W    #$72,A1        ;variable value area
  699.     MOVEQ    #$0D,D0        ;MT.LNKFR link free space
  700.                 ;back into heap
  701.     TRAP    #1
  702. L04FFA:
  703.     RTS
  704. L04FFC:
  705.     DC.W    $4E75
  706.     DC.W    $0000
  707. ; --------------------------------------------------------------
  708. ;*/beginoverlay
  709. L05000:
  710. ; microdrive routines were here in JS ROM
  711. ;*/beginfilling
  712. NOP051B0:
  713.     DCB.w    ($51B0-(NOP051B0-ORGN))/2,$4E71
  714. ;*/endfilling
  715. L051B0:
  716. MD_WRITE:
  717.     rts
  718. ;*/beginfilling
  719. NOP0523A:
  720.     DCB.w    ($523A-(NOP0523A-ORGN))/2,$4E71
  721. ;*/endfilling
  722. L0523A:
  723. MD_SECTR:
  724.     rts
  725. ;*/beginfilling
  726. NOP0525C:
  727.     DCB.w    ($525C-(NOP0525C-ORGN))/2,$4E71
  728. ;*/endfilling
  729. L0525C:
  730. MD_READ:
  731.     rts
  732. ;*/beginfilling
  733. NOP05262:
  734.     DCB.w    ($5262-(NOP05262-ORGN))/2,$4E71
  735. ;*/endfilling
  736. L05262:
  737. MD_VERIN:
  738.     rts
  739. ;*/beginfilling
  740. NOP0566E:
  741.     DCB.w    ($566E-(NOP0566E-ORGN))/2,$4E71
  742. ;*/endfilling
  743. ;*/endoverlay
  744. ; --------------------------------------------------------------
  745. ; initialize BASIC pointers
  746. L0566E:
  747.     SUBA.L    A3,A3
  748.     MOVEQ    #$48,D0
  749. L05672:
  750.     MOVE.L    #$100,0(A6,A3.L)
  751.     ADDQ.W    #4,A3
  752.     CMPA.W    D0,A3
  753.     BLT.S    L05672
  754.     MOVEQ    #$64,D0
  755. L05682    MOVE.L    A5,0(A6,A3.L)
  756.     ADDQ.W    #4,A3
  757.     CMPA.W    D0,A3
  758.     BLE.S    L05682
  759.     SF    BV_INLIN(A6)    ;Processing inline clause
  760.     ST    BV_CONT(A6)    ;continue ($80) or stop (0)
  761.     ST    $82(A6)        ;
  762.     SF    BV_AUTO(A6)    ;AUTO/EDIT on ($FF) or off (0)
  763.     ST    BV_PRINT(A6)    ;Print from prtok ($ff)
  764.                 ;or leave in buffer
  765.     MOVE.W    #$FFFF,BV_NXLIN(A6) ;Which line # to start after
  766.     MOVE.L    #-1,$CA(A6)    ;
  767.     MOVEQ    #0,D0
  768.     MOVE.W    D0,$C8(A6)    ;
  769.     MOVE.L    D0,BV_COMCH(A6)    ;Command channel
  770.     MOVE.L    D0,BV_VVFREE(A6)    ;First free space in vv tbl
  771.     JSR    L04E32(PC)    ;*/undomodify BSR L04E32
  772.                 ;allocate memory
  773.     MOVEQ    #$7E,D1        ;Memory to allocate
  774.     JMP    L04E6A(PC)    ;*/undomodify BRA L04E6A
  775. L056C6    ;liberatee memory
  776.     MOVEA.L    BV_BTP(A6),A1    ;backtrack stack for parser
  777.     MOVE.L    A1,D1
  778.     SUB.L    BV_LNP(A6),D1    ;line # running ptr
  779.     ANDI.L    #$FFFFFE00,D1
  780.     BEQ.S    L05700
  781.     MOVEA.L    A1,A0
  782.     SUBA.L    D1,A0
  783. L056DC    MOVE.L    0(A6,A1.L),0(A6,A0.L)
  784.     ADDQ.W    #4,A1
  785.     ADDQ.W    #4,A0
  786.     CMPA.L    BV_SSBAS(A6),A1    ;system stack running ptr
  787.     BLT.S    L056DC
  788.     MOVEQ    #$48,D0
  789.     MOVEQ    #$64,D2
  790. L056F0    SUB.L    D1,0(A6,D0.L)
  791.     ADDQ.B    #4,D0
  792.     CMP.B    D2,D0
  793.     BLE.S    L056F0
  794.     SUBA.L    D1,A7
  795.     MOVEQ    #$17,D0        ;MT.REBAS release Basic
  796.                 ;program area (D1 bytes)
  797.     TRAP    #1
  798. L05700    RTS
  799. STO_VARValue ;store value of variable
  800.     CMPA.L    BV_NTP(A6),A5    ;name table running ptr
  801.     BNE.S    L0570C
  802.     MOVE.L    A3,BV_NTP(A6)    ;name table running ptr
  803. L0570C    CMPA.L    A5,A3
  804.     BGE    L057EE
  805.     ANDI.B    #$0F,$01(A6,A3.L)
  806.     BEQ.S    L05778
  807.     CMPI.W    #$FFFF,$02(A6,A3.L)
  808.     BNE.S    L05728
  809.     MOVEA.L    A3,A2
  810.     BSR.S    L05784
  811.     BRA.S    L05778
  812. L05728    MOVEQ    #$01,D0
  813.     SUB.B    0(A6,A3.L),D0
  814.     BGE.S    L05778
  815.     MOVE.W    2(A6,A3.L),D0
  816.     LSL.L    #3,D0        ;* 8
  817.     MOVEA.L    BV_NTBAS(A6),A2    ;name table
  818.     ADDA.L    D0,A2
  819.     CMPI.B    #3,0(A6,A2.L)    ;Array ?
  820.     BNE.S    L0576C
  821.     CMPI.B    #2,0(A6,A3.L)
  822.     BEQ.S    L05778
  823.     MOVEA.L    4(A6,A3.L),A0
  824.     ADDA.L    BV_VVBAS(A6),A0    ;variable values
  825.     MOVEQ    #0,D1
  826.     MOVE.W    4(A6,A0.L),D1
  827.     LSL.W    #2,D1
  828.     ADDQ.W    #6,D1
  829.     MOVEM.L    D2/A1-A3,-(A7)
  830.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  831.     MOVEM.L    (A7)+,D2/A1-A3
  832.     BRA.S    L05778
  833. L0576C    MOVE.L    4(A6,A3.L),4(A6,A2.L)
  834.     MOVE.B    0(A6,A3.L),0(A6,A2.L)
  835. L05778    MOVE.L    D7,0(A6,A3.L)
  836.     MOVE.L    D7,$04(A6,A3.L)
  837.     ADDQ.W    #8,A3
  838.     BRA.S    L0570C
  839. L05784    ;relaease memory that was occupied by a variable
  840.     MOVEM.L    D2/D4/D6/A1-A3,-(A7)
  841.     MOVEA.L    BV_VVBAS(A6),A0    ;variable values
  842.     MOVE.L    4(A6,A2.L),D1
  843.     BLT.S    L057E8
  844.     ADDA.L    D1,A0
  845.     MOVE.B    0(A6,A2.L),D0
  846.     SUBQ.B    #2,D0
  847.     BLE.S    L057C0
  848.     SUBQ.B    #1,D0
  849.     BNE.S    L057AC
  850.     MOVE.L    D1,D4
  851.     MOVE.B    $01(A6,A2.L),D6
  852.     JSR    L099FE(PC)    ;*/undomodify BSR L099FE
  853.     BRA.S    L057E8
  854. L057AC    SUBQ.B    #3,D0
  855.     BEQ.S    L057BC
  856.     SUBQ.B    #1,D0
  857.     BEQ.S    L057B8
  858.     MOVEQ    #-$0C,D0
  859.     BRA.S    L057EA
  860. L057B8    MOVEQ    #$1A,D1
  861.     BRA.S    L057DC
  862. L057BC    MOVEQ    #$0C,D1
  863.     BRA.S    L057DC
  864. L057C0    MOVE.B    $01(A6,A2.L),D0
  865.     SUBQ.B    #2,D0
  866.     BLT.S    L057D2
  867.     BEQ.S    L057CE
  868.     MOVEQ    #$02,D1
  869.     BRA.S    L057DC
  870. L057CE    MOVEQ    #$06,D1
  871.     BRA.S    L057DC
  872. L057D2    MOVEQ    #$03,D1
  873.     ADD.W    0(A6,A0.L),D1
  874.     BCLR    #0,D1
  875. L057DC    MOVE.L    #$FFFFFFFF,$04(A6,A2.L)
  876.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  877. L057E8    MOVEQ    #0,D0
  878. L057EA    MOVEM.L    (A7)+,D2/D4/D6/A1-A3
  879. L057EE    RTS
  880. ; Basic operator & (append String)
  881. BAS_STRCat_op:
  882.     MOVE.L    A0,-(A7)
  883.     MOVE.W    0(A6,A1.L),D0
  884.     ADDQ.W    #2,A1
  885.     MOVEQ    #0,D1
  886.     MOVE.W    D0,D1
  887.     BEQ    L0588A
  888.     SWAP    D0
  889.     ADDQ.W    #1,D1
  890.     BCLR    #0,D1
  891.     MOVE.W    D1,D0
  892.     SUBA.L    BV_RIBAS(A6),A1    ;arith stack running ptr
  893.     MOVEM.L    D0-D2/A1,-(A7)
  894.     JSR    L04DF6(PC)    ;*/undomodify BSR L04DF6
  895.     MOVEM.L    (A7)+,D0-D2/A1
  896.     ADDA.L    BV_RIBAS(A6),A1    ;arith stack running ptr
  897. L0581E    MOVE.W    0(A6,A1.L),0(A6,A0.L)
  898.     ADDQ.W    #2,A1
  899.     ADDQ.W    #2,A0
  900.     SUBQ.W    #2,D1
  901.     BGT.S    L0581E
  902.     SUBA.W    D0,A0
  903.     MOVE.W    0(A6,A1.L),D2
  904.     ADDQ.W    #2,A1
  905.     MOVEA.L    A1,A2
  906.     MOVE.W    D2,D1
  907.     ADDQ.W    #1,D1
  908.     BCLR    #0,D1
  909.     ADDA.W    D1,A1
  910.     MOVE.W    D2,D1
  911.     SWAP    D0
  912.     ADD.W    D0,D1
  913.     ADDQ.W    #1,D1
  914.     BMI.S    L05890
  915.     BCLR    #0,D1
  916.     SUBA.W    D1,A1
  917.     MOVE.W    D2,D1
  918.     BEQ.S    L05862
  919. L05854    MOVE.B    0(A6,A2.L),0(A6,A1.L)
  920.     ADDQ.W    #1,A2
  921.     ADDQ.W    #1,A1
  922.     SUBQ.W    #1,D1
  923.     BGT.S    L05854
  924. L05862    ADD.W    D0,D2
  925.     MOVE.L    D0,D1
  926. L05866    MOVE.B    0(A6,A0.L),0(A6,A1.L)
  927.     ADDQ.W    #1,A0
  928.     ADDQ.W    #1,A1
  929.     SUBQ.W    #1,D0
  930.     BGT.S    L05866
  931.     SUBA.W    D1,A0
  932.     SUBA.W    D2,A1
  933.     SUBQ.W    #2,A1
  934.     MOVE.W    D2,0(A6,A1.L)
  935.     CLR.W    D1
  936.     SWAP    D1
  937.     MOVE.L    A1,-(A7)
  938.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  939.     MOVEA.L    (A7)+,A1
  940. L0588A    MOVEQ    #0,D0
  941. L0588C    MOVEA.L    (A7)+,A0
  942.     RTS
  943. L05890    ;joined string was too long
  944.     LEA    -2(A2),A1
  945.     MOVE.W    D0,D1
  946.     MOVE.L    A1,-(A7)
  947.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  948.     MOVEA.L    (A7)+,A1
  949.     MOVEQ    #-$12,D0
  950.     BRA.S    L0588C
  951. L058A2    DC.L    $00020202,$02050505,$05050505,$03030302
  952.     DC.L    $01020202,$03030102,$02030200
  953. L058BE    ANDI.B    #$0F,-7(A6,A5.L)
  954.     MOVEQ    #0,D0
  955.     MOVE.B    L058A2(PC,D4.W),D0
  956.     CMPI.B    #$16,D4
  957.     BGT    L0598C
  958.     ANDI.B    #$0F,-$0F(A6,A5.L)
  959.     CMP.B    -$07(A6,A5.L),D0
  960.     BEQ.S    L05904
  961.     CMPI.B    #5,D0
  962.     BNE.S    L058FA
  963.     MOVE.B    -$07(A6,A5.L),D2
  964.     CMP.B    -$0F(A6,A5.L),D2
  965.     BNE.S    L058F8
  966.     SUBQ.B    #1,D2
  967.     BNE.S    L058F8
  968.     SUBQ.W    #8,A5
  969. L058F4    BRA    L05992
  970. L058F8    MOVEQ    #2,D0
  971. L058FA    BSR    L05996
  972.     BNE    L05994
  973.     MOVE.B    D2,D0
  974. L05904    SUBQ.W    #8,A5
  975.     CMP.B    -$07(A6,A5.L),D0
  976.     BEQ.S    L058F4
  977.     MOVE.B    $01(A6,A5.L),D1
  978.     SUBQ.B    #2,D1
  979.     BLT.S    L0592A
  980.     BEQ.S    L0591E
  981.     MOVE.W    0(A6,A1.L),-(A7)
  982.     ADDQ.W    #2,A1
  983.     BRA.S    L05946
  984. L0591E    MOVE.L    $02(A6,A1.L),-(A7)
  985.     MOVE.W    0(A6,A1.L),-(A7)
  986.     ADDQ.W    #6,A1
  987.     BRA.S    L05946
  988. L0592A    MOVEQ    #$03,D2
  989.     ADD.W    0(A6,A1.L),D2
  990.     BCLR    #0,D2
  991.     SUBA.L    D2,A7
  992.     MOVE.L    D2,D1
  993.     SUBQ.W    #1,D1
  994. L0593A    MOVE.W    0(A6,A1.L),(A7)+
  995.     ADDQ.W    #2,A1
  996.     SUBQ.W    #2,D1
  997.     BGE.S    L0593A
  998.     SUBA.L    D2,A7
  999. L05946    MOVE.B    D1,-(A7)
  1000.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1001.     BSR.S    L05996
  1002.     MOVE.B    (A7)+,D2
  1003.     BLT.S    L05968
  1004.     BEQ.S    L0595C
  1005.     SUBQ.W    #2,A1
  1006.     MOVE.W    (A7)+,0(A6,A1.L)
  1007.     BRA.S    L05980
  1008. L0595C    SUBQ.W    #6,A1
  1009.     MOVE.W    (A7)+,0(A6,A1.L)
  1010.     MOVE.L    (A7)+,$02(A6,A1.L)
  1011.     BRA.S    L05980
  1012. L05968    MOVEQ    #$03,D2
  1013.     ADD.W    (A7),D2
  1014.     BCLR    #0,D2
  1015.     SUBA.L    D2,A1
  1016.     MOVE.L    D2,D1
  1017. L05974    MOVE.W    (A7)+,0(A6,A1.L)
  1018.     ADDQ.W    #2,A1
  1019.     SUBQ.W    #2,D1
  1020.     BGT.S    L05974
  1021.     SUBA.L    D2,A1
  1022. L05980    MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1023.     TST.L    D0
  1024.     BEQ.S    L05994
  1025.     ADDQ.W    #8,A5
  1026.     RTS
  1027. L0598C    ;single operator
  1028.     CMP.B    -$07(A6,A5.L),D0
  1029.     BNE.S    L05996
  1030. L05992    MOVEQ    #0,D0
  1031. L05994    RTS
  1032. L05996    ;convert variables
  1033.     MOVE.L    D7,-(A7)
  1034.     MOVE.L    A0,-(A7)
  1035.     MOVE.B    D0,-(A7)
  1036.     MOVE.B    -7(A6,A5.L),D2
  1037.     MOVEQ    #$0F,D1
  1038.     AND.L    D1,D0
  1039.     AND.L    D1,D2
  1040.     SUB.B    D2,D0
  1041.     BEQ.S    L05A0A
  1042.     SUBQ.B    #2,D2
  1043.     BLT.S    L059DE
  1044.     BEQ.S    L059C4
  1045.     ADDQ.B    #1,D0
  1046.     BLT.S    L059BA
  1047.     JSR    RI_FLOAT(PC)    ;*/undomodify BSR RI_FLOAT
  1048.     BRA.S    L05A0A
  1049. L059BA    MOVEA.L    (A6),A0
  1050.     JSR    CN_ITOD(PC)    ;*/undomodify BSR CN_ITOD
  1051.     BSR.S    L05A20
  1052.     BRA.S    L05A0A
  1053. L059C4    TST.B    D0
  1054.     BLT.S    L059D4
  1055.     JSR    RI_NINT(PC)    ;*/undomodify BSR RI_NINT
  1056.     MOVE.B    #$03,-$07(A6,A5.L)
  1057.     BRA.S    L05A0A
  1058. L059D4    MOVEA.L    (A6),A0
  1059.     JSR    CN_FTOD(PC)    ;*/undomodify BSR CN_FTOD
  1060.     BSR.S    L05A20
  1061.     BRA.S    L05A0A
  1062. L059DE    SUBQ.B    #1,D0
  1063.     BLT.S    L05A0A
  1064.     BEQ.S    L059F0
  1065.     BSR.S    L05A34
  1066.     MOVE.L    A0,-(A7)
  1067.     ADDQ.W    #2,A0
  1068.     JSR    CN_DTOI(PC)    ;*/undomodify BSR CN_DTOI
  1069.     BRA.S    L059FA
  1070. L059F0    BSR.S    L05A34
  1071.     MOVE.L    A0,-(A7)
  1072.     ADDQ.W    #2,A0
  1073.     JSR    CN_DTOF(PC)    ;*/undomodify BSR CN_DTOF
  1074. L059FA    MOVEA.L    (A7)+,A0
  1075.     MOVE.L    D0,-(A7)
  1076.     BSR.S    L05A66
  1077.     MOVE.L    (A7)+,D0
  1078.     BEQ.S    L05A0A
  1079.     SUBQ.W    #2,A1
  1080.     CLR.W    0(A6,A1.L)
  1081. L05A0A    MOVE.B    (A7)+,D2
  1082.     MOVEA.L    (A7)+,A0
  1083.     MOVE.L    (A7)+,D7
  1084.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1085.     TST.L    D0
  1086.     BNE.S    L05A1E
  1087.     MOVE.B    D2,-$07(A6,A5.L)
  1088.     MOVEQ    #0,D0
  1089. L05A1E    RTS
  1090. L05A20    ;copy ASCII on arithmetic stack
  1091.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1092.     MOVE.L    A4,-(A7)
  1093.     MOVE.L    A0,D1
  1094.     MOVEA.L    (A6),A4
  1095.     SUB.L    A4,D1
  1096.     JSR    L05F88(PC)    ;*/undomodify BSR L05F88
  1097.     MOVEA.L    (A7)+,A4
  1098.     BRA.S    L05A62
  1099. L05A34    ;copy ASCII in variables zone
  1100.     MOVEQ    #3,D1
  1101.     ADD.W    0(A6,A1.L),D1
  1102.     BCLR    #0,D1
  1103.     JSR    L04DF6(PC)    ;*/undomodify BSR L04DF6
  1104.     MOVEA.L    BV_RIP(A6),A1    ;arith stack
  1105.     MOVE.L    A0,-(A7)
  1106. L05A48    MOVE.W    0(A6,A1.L),0(A6,A0.L)
  1107.     ADDQ.W    #2,A0
  1108.     ADDQ.W    #2,A1
  1109.     SUBQ.L    #2,D1
  1110.     BGT.S    L05A48
  1111.     MOVEA.L    (A7)+,A0
  1112.     MOVE.L    A0,D7
  1113.     MOVEQ    #$02,D1
  1114.     ADD.W    0(A6,A0.L),D1
  1115.     ADD.L    D1,D7
  1116. L05A62    MOVEQ    #0,D0
  1117.     RTS
  1118. L05A66    ;handling of expression after variable, function or
  1119.     ;instruction
  1120.     MOVE.L    A1,-(A7)
  1121.     MOVEQ    #$03,D1
  1122.     ADD.W    0(A6,A0.L),D1
  1123.     BCLR    #0,D1
  1124.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  1125.     MOVEA.L    (A7)+,A1
  1126.     RTS
  1127.     MOVEQ    #1,D0
  1128.     BRA.S    L05A84
  1129. L05A7E    MOVEQ    #2,D0
  1130.     BRA.S    L05A84
  1131. L05A82    MOVEQ    #3,D0
  1132. L05A84    MOVE.B    D0,-(A7)
  1133.     BSR.S    L05AA0
  1134.     BNE.S    L05A9A
  1135.     MOVE.B    (A7),D0
  1136.     BNE.S    L05A90
  1137.     MOVEQ    #1,D0
  1138. L05A90    JSR    L05996(PC)    ;*/undomodify BSR L05996
  1139.     SUBQ.L    #8,A5
  1140.     MOVE.L    A5,BV_NTP(A6)    ;name table running ptr
  1141. L05A9A    ADDQ.W    #2,A7
  1142.     TST.L    D0
  1143.     RTS
  1144. L05AA0    BSR.S    L05ABA
  1145.     BNE.S    L05AA8
  1146.     BSR    L05EC8
  1147. L05AA8    RTS
  1148. L05AAA:
  1149.     DC.B    L05AF4-L05AF4
  1150.     DC.B    L05B08-L05AF4
  1151.     DC.B    L05B08-L05AF4
  1152.     DC.B    L05B08-L05AF4
  1153.     DC.B    L05AF8-L05AF4
  1154.     DC.B    L05B78-L05AF4
  1155.     DC.B    L05B8C-L05AF4
  1156.     DC.B    L05BAC-L05AF4
  1157.     DC.B    L05BB6-L05AF4
  1158.     DC.B    L05B08-L05AF4
  1159.     DC.B    L05B08-L05AF4
  1160.     DC.B    L05BB2-L05AF4
  1161.     DC.B    L05B08-L05AF4
  1162.     DC.B    L05B08-L05AF4
  1163.     DC.B    L05B08-L05AF4
  1164.     DC.B    L05AF4-L05AF4
  1165. L05ABA    MOVEA.L    $1C(A6),A5    ;base of resident procedure
  1166.                 ;area
  1167.     MOVE.L    A5,-(A7)
  1168.     MOVEM.L    D4-D6,-(A7)
  1169.     ST    -(A7)
  1170.     MOVEQ    #$40,D1
  1171.     JSR    L04E60(PC)    ;*/undomodify BSR L04E60
  1172.                 ;allocate 64 byte for name
  1173.                 ;table
  1174.     MOVEQ    #2,D0
  1175.     JSR    L04E32(PC)    ;*/undomodify BSR L04E32
  1176.                 ;allocate memory
  1177.     BRA.S    L05ADC
  1178. L05AD4    MOVEQ    #1,D6
  1179.     BRA.S    L05ADE
  1180. L05AD8    ST    D6
  1181.     BRA.S    L05ADE
  1182. L05ADC    SF    D6
  1183. L05ADE    MOVEQ    #$7F,D4
  1184.     AND.B    0(A6,A0.L),D4
  1185.     CMPI.B    #$70,D4
  1186.     BGE    L05C58
  1187.     MOVE.B    L05AAA(PC,D4.W),D4
  1188.     JMP    L05AF4(PC,D4.W)
  1189. L05AF4:
  1190.     ADDQ.W    #2,A0
  1191.     BRA.S    L05ADE
  1192. L05AF8:
  1193.     MOVE.B    1(A6,A0.L),D4
  1194.     CMPI.B    #5,D4
  1195.     BEQ.S    L05B0E
  1196.     CMPI.B    #1,D4
  1197.     BEQ.S    L05B72
  1198. L05B08:
  1199.     MOVEQ    #0,D5
  1200.     BRA    BAS_OPERators
  1201. L05B0E    ADDQ.W    #2,A0
  1202.     TST.B    D6
  1203.     BEQ.S    L05B42
  1204.     BGT    L05BAC
  1205.     CMPI.B    #3,-8(A6,A5.L)
  1206.     BEQ.S    L05B28
  1207.     JSR    L063D0(PC)    ;*/undomodify BSR L063D0
  1208.     BNE.S    L05B2C
  1209.     BRA.S    L05AD8
  1210. L05B28    JSR    L06272(PC)    ;*/undomodify BSR L06272
  1211. L05B2C    BNE    L05CA2
  1212.     CMPI.B    #3,-8(A6,A5.L)
  1213.     BEQ.S    L05AD8
  1214. L05B38    CMPI.B    #1,-7(A6,A5.L)
  1215.     BEQ.S    L05AD8
  1216.     BRA.S    L05AD4
  1217. L05B42    BSR    L05AA0
  1218.     BNE    L05CA2
  1219.     CMPI.W    #$8406,0(A6,A0.L)
  1220.     BNE.S    L05BAC
  1221.     ADDQ.W    #2,A0
  1222.     BRA.S    L05B38
  1223. L05B56    ;table of priorities of arithmetic operations
  1224.     DC.L    $00050506,$06040404,$04040404,$01020107
  1225.     DC.L    $09010201,$0606080B,$0B030300
  1226. L05B72:
  1227.     MOVE.W    #$8508,0(A6,A0.L)
  1228. L05B78:
  1229.     TST.B    D6
  1230.     BEQ.S    L05BAC
  1231.     MOVE.B    1(A6,A0.L),D4
  1232.     ADDQ.W    #2,A0
  1233.     MOVE.B    L05B56(PC,D4.W),D5
  1234.     SWAP    D4
  1235.     BRA    BAS_OP_1lbl
  1236. L05B8C:
  1237.     MOVEQ    #$16,D4
  1238.     ADD.B    1(A6,A0.L),D4
  1239.     ADDQ.W    #2,A0
  1240.     MOVE.B    L05B56(PC,D4.W),D5
  1241.     BRA.S    L05BA2
  1242. L05B9A    TST.B    D5
  1243.     BEQ    L05D06
  1244.     SWAP    D4
  1245. L05BA2    MOVE.B    D5,-(A7)
  1246.     MOVE.B    D4,1(A7)
  1247.     BRA    L05ADC
  1248. L05BAC:
  1249.     MOVEQ    #-$11,D0     ;Error in expression
  1250.     BRA    L05CA2
  1251. L05BB2:
  1252.     BRA    L05C6A
  1253. L05BB6    ;*********** calling functions (basic and machinecode)
  1254.     ;******
  1255.     MOVEA.L    BV_NTP(A6),A5    ;name table running ptr
  1256.     ADDQ.L    #8,BV_NTP(A6)    ;name table running ptr
  1257.     MOVEQ    #0,D4
  1258.     MOVE.W    2(A6,A0.L),D4
  1259.     MOVE.L    D4,D0
  1260.     ADDQ.W    #4,A0
  1261.     LSL.L    #3,D4
  1262.     MOVEA.L    BV_NTBAS(A6),A3    ;name table
  1263.     ADDA.L    D4,A3
  1264.     MOVE.B    0(A6,A3.L),D4
  1265.     CMPI.B    #$09,D4        ;machine code function ?
  1266.     BEQ.S    L05C0C
  1267.     CMPI.B    #$05,D4        ;Basic function ?
  1268.     BEQ.S    L05C12
  1269.     CMPI.B    #8,D4        ;machinecode procedure
  1270.     BEQ.S    L05BAC        ;signal error in expression
  1271.     CMPI.B    #4,D4        ;Basic procedure
  1272.     BEQ.S    L05BAC        ;signal error in expression
  1273.     MOVE.W    0(A6,A3.L),0(A6,A5.L)
  1274.     ANDI.B    #$0F,1(A6,A5.L)
  1275.     MOVE.W    D0,2(A6,A5.L)
  1276.     MOVE.L    4(A6,A3.L),4(A6,A5.L)
  1277.     ADDQ.W    #8,A5
  1278.     SUBQ.B    #3,D4
  1279.     BEQ.S    L05C1E
  1280.     BRA    L05C94
  1281. L05C0C    JSR    CAL_FN68k(PC)    ;*/undomodify BSR CAL_FN68k
  1282.     BRA.S    L05C16
  1283. L05C12    JSR    CAL_FNBAs(PC)    ;*/undomodify BSR CAL_FNBAs
  1284. L05C16    BNE    L05CA2
  1285.     BRA    L05AD4
  1286. L05C1E    MOVEQ    #0,D1
  1287.     MOVE.L    -4(A6,A5.L),D0
  1288.     BLT.S    L05BAC
  1289.     MOVEA.L    BV_VVBAS(A6),A3    ;variable values
  1290.     ADDA.L    D0,A3
  1291.     MOVE.W    4(A6,A3.L),D1
  1292.     LSL.W    #2,D1
  1293.     ADDQ.W    #6,D1
  1294.     MOVE.L    A3,-(A7)
  1295.     BSR    L05FC2
  1296.     MOVEA.L    (A7)+,A3
  1297.     MOVE.L    A2,D2
  1298.     SUB.L    BV_VVBAS(A6),D2    ;variable values
  1299.     MOVE.L    D2,-4(A6,A5.L)
  1300. L05C46    MOVE.W    0(A6,A3.L),0(A6,A2.L)
  1301.     ADDQ.W    #2,A3
  1302.     ADDQ.W    #2,A2
  1303.     SUBQ.W    #2,D1
  1304.     BNE.S    L05C46
  1305.     BRA    L05AD8
  1306. L05C58    MOVEA.L    A0,A4
  1307.     BSR    L05F6C
  1308.     ADDQ.W    #6,A0
  1309.     ANDI.B    #$0F,0(A6,A1.L)
  1310.     MOVEQ    #$02,D4
  1311.     BRA.S    L05C76
  1312. L05C6A    ADDQ.W    #2,A0
  1313.     MOVEA.L    A0,A4
  1314.     BSR    L05F80
  1315.     MOVEA.L    A4,A0
  1316.     MOVEQ    #$01,D4
  1317. L05C76    MOVEA.L    BV_NTP(A6),A5    ;name table running ptr
  1318.     ADDQ.L    #8,BV_NTP(A6)    ;name table running ptr
  1319.     MOVE.B    #1,0(A6,A5.L)
  1320.     MOVE.B    D4,1(A6,A5.L)
  1321.     MOVE.W    #$FFFF,$02(A6,A5.L)
  1322.     CLR.L    4(A6,A5.L)
  1323.     ADDQ.W    #8,A5
  1324. L05C94    CMPI.B    #1,-7(A6,A5.L)
  1325.     BEQ    L05AD8
  1326.     BRA    L05AD4
  1327. L05CA2    TST.W    (A7)+
  1328.     BGE.S    L05CA2
  1329.     MOVEM.L    (A7)+,D4-D6
  1330. L05CAA    CMPA.L    (A7),A5
  1331.     BEQ.S    L05CB4
  1332.     MOVEQ    #1,D2
  1333.     BSR.S    L05CBC
  1334.     BRA.S    L05CAA
  1335. L05CB4    MOVE.L    A5,BV_NTP(A6)    ;name table running ptr
  1336.     ADDQ.W    #4,A7
  1337.     BRA.S    L05D12
  1338. L05CBC    MOVE.B    -8(A6,A5.L),D1
  1339.     SUBQ.B    #1,D1
  1340.     BNE.S    L05CEC
  1341.     SUBQ.B    #2,-7(A6,A5.L)
  1342.     BLT.S    L05CD6
  1343.     BGT.S    L05CD0
  1344.     ADDQ.L    #4,BV_RIP(A6)    ;arith stack
  1345. L05CD0    ADDQ.L    #2,BV_RIP(A6)    ;arith stack
  1346.     BRA.S    L05CE8
  1347. L05CD6    MOVEA.L    BV_RIP(A6),A1    ;arith stack
  1348.     MOVEQ    #3,D1
  1349.     ADD.W    0(A6,A1.L),D1
  1350.     BCLR    #0,D1
  1351.     ADD.L    D1,BV_RIP(A6)    ;arith stack
  1352. L05CE8    SUBQ.W    #8,A5
  1353. L05CEA    RTS
  1354. L05CEC    TST.B    D2
  1355.     BEQ.S    L05CEA
  1356.     SUBQ.B    #2,D1
  1357.     BNE.S    L05CE8
  1358.     MOVE.L    -4(A6,A5.L),D1
  1359.     BLT.S    L05CE8
  1360.     MOVEA.L    BV_VVBAS(A6),A3    ;variable values
  1361.     ADDA.L    D1,A3
  1362.     BSR    L05F30
  1363.     BRA.S    L05CE8
  1364. L05D06    MOVEQ    #0,D0
  1365.     ADDQ.W    #2,A7
  1366.     MOVEM.L    (A7)+,D4-D6
  1367.     CMPA.L    (A7)+,A5
  1368.     SEQ    D0
  1369. L05D12    TST.L    D0
  1370.     RTS
  1371. BAS_OPERators:
  1372.     TST.B    (A7)
  1373.     BLE.S    L05D06
  1374. BAS_OP_1lbl:
  1375.     BSR    L05EC8
  1376. BAS_OP_2lbl:
  1377.     BNE.S    L05CA2
  1378. BAS_OP_Exe:
  1379.     CMP.B    (A7),D5        ;interpret operators (+-*/^
  1380.                 ;etc.)
  1381.     BGT    L05B9A
  1382.     MOVE.W    (A7)+,D4
  1383.     ANDI.W    #$FF,D4
  1384.     JSR    L058BE(PC)    ;*/undomodify BSR L058BE
  1385.     BNE.S    BAS_OP_2lbl
  1386.     MOVE.L    A5,BV_NTP(A6)    ;name table running ptr
  1387.     ADD.W    D4,D4
  1388.     MOVE.W    OP_JMP_Table(PC,D4.W),D4
  1389.     BEQ    L05BAC
  1390.     MOVEQ    #2,D0
  1391.     JSR    OP_JMP_Table(PC,D4.W)
  1392.     BNE.S    BAS_OP_2lbl
  1393.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1394.     BRA.S    BAS_OP_Exe
  1395. OP_JMP_Table:
  1396.     DC.W    OP_JMP_Table-OP_JMP_Table
  1397.     DC.W    RI_ADD-OP_JMP_Table
  1398.     DC.W    RI_SUB-OP_JMP_Table
  1399.     DC.W    RI_MULT-OP_JMP_Table
  1400.     DC.W    RI_DIV-OP_JMP_Table
  1401.     DC.W    BAS_GE_Op-OP_JMP_Table
  1402.     DC.W    BAS_GT_Op-OP_JMP_Table
  1403.     DC.W    BAS_EQEq_op-OP_JMP_Table
  1404.     DC.W    BAS_EQ_Op-OP_JMP_Table
  1405.     DC.W    BAS_NE_Op-OP_JMP_Table
  1406.     DC.W    BAS_LE_Op-OP_JMP_Table
  1407.     DC.W    BAS_LT_Op-OP_JMP_Table
  1408.     DC.W    BAS_BOR_op-OP_JMP_Table
  1409.     DC.W    BAS_BAND_op-OP_JMP_Table
  1410.     DC.W    BAS_BXOR_op-OP_JMP_Table
  1411.     DC.W    RI_POWFP-OP_JMP_Table
  1412.     DC.W    BAS_STRCat_op-OP_JMP_Table
  1413.     DC.W    BAS_LOR_op-OP_JMP_Table
  1414.     DC.W    BAS_LAND_op-OP_JMP_Table
  1415.     DC.W    BAS_LXOR_op-OP_JMP_Table
  1416.     DC.W    BAS_MOD_op-OP_JMP_Table
  1417.     DC.W    BAS_DIV_op-OP_JMP_Table
  1418.     DC.W    BAS_INSTr_op-OP_JMP_Table
  1419.     DC.W    BAS_NOT_op-OP_JMP_Table
  1420.     DC.W    L05E0C-OP_JMP_Table
  1421.     DC.W    L05E84-OP_JMP_Table
  1422.     DC.W    L05E54-OP_JMP_Table
  1423. BAS_LT_Op ;Basic operator <
  1424.     BSR.S    L05DAA
  1425.     BLT.S    L05DF4
  1426.     BRA.S    L05E04
  1427. BAS_GT_Op ;Basic operator >
  1428.     BSR.S    L05DAA
  1429.     BGT.S    L05DF4
  1430.     BRA.S    L05E04
  1431. BAS_EQEq_op ;Basic operator == (used to be BAS_EQEQ_op - MJS)
  1432.     MOVEQ    #3,D0
  1433. BAS_EQ_Op ;Basic operator =
  1434.     BSR.S    L05DAA
  1435.     BEQ.S    L05DF4
  1436.     BRA.S    L05E04
  1437. BAS_GE_Op ;Basic operator >=
  1438.     BSR.S    L05DAA
  1439.     BGE.S    L05DF4
  1440.     BRA.S    L05E04
  1441. BAS_LE_Op ;Basic operator <=
  1442.     BSR.S    L05DAA
  1443. L05DA0    BLE.S    L05DF4
  1444.     BRA.S    L05E04
  1445. BAS_NE_Op ;Basic operator <>
  1446.     BSR.S    L05DAA
  1447.     BNE.S    L05DF4
  1448.     BRA.S    L05E04
  1449. L05DAA    CMPI.B    #1,-7(A6,A5.L)
  1450.     BNE.S    L05DCC
  1451.     MOVE.L    A0,-(A7)
  1452.     BSR.S    L05E16
  1453.     JSR    UT_CSTR(PC)    ;*/undomodify BSR UT_CSTR
  1454.     BSR.S    L05E14
  1455.     LEA    -6(A0),A1
  1456.     MOVE.B    #2,-7(A6,A5.L)
  1457. L05DC6    MOVEA.L    (A7)+,A0
  1458.     TST.L    D0
  1459.     RTS
  1460. L05DCC    MOVE.W    D0,D4
  1461.     JSR    RI_SUB(PC)    ;*/undomodify BSR RI_SUB
  1462.     BNE.S    L05DF0
  1463.     SUBQ.W    #3,D4
  1464.     BEQ.S    L05DDE
  1465.     TST.B    2(A6,A1.L)
  1466.     RTS
  1467. L05DDE    ADDQ.W    #4,A7
  1468.     MOVE.W    0(A6,A1.L),D0
  1469.     BEQ.S    L05DF4
  1470.     ADDI.W    #$0018,D0
  1471.     SUB.W    -6(A6,A1.L),D0
  1472.     BRA.S    L05DA0
  1473. L05DF0    ADDQ.W    #4,A7
  1474.     RTS
  1475. L05DF4    MOVE.W    #$0801,0(A6,A1.L) ;Floatingpoint 1.0
  1476.     MOVE.L    #$40000000,2(A6,A1.L)
  1477.     BRA.S    L05E0C
  1478. L05E04    CLR.W    0(A6,A1.L)
  1479.     CLR.L    2(A6,A1.L)
  1480. L05E0C    MOVEQ    #0,D0
  1481.     RTS
  1482. BAS_NOT_op:
  1483.     JMP    RI_NEG(PC)    ;*/undomodify BRA RI_NEG
  1484. L05E14    MOVEA.L    A0,A1
  1485. L05E16    MOVE.W    0(A6,A1.L),D2
  1486.     ADDQ.W    #3,D2
  1487.     BCLR    #0,D2
  1488.     LEA    0(A1,D2.W),A0
  1489.     RTS
  1490. BAS_INSTr_op ;Basic operator INSTR
  1491.     MOVEQ    #1,D0
  1492.     MOVE.L    A0,-(A7)
  1493.     BSR.S    L05E16
  1494.     JSR    L03A6E(PC)    ;*/undomodify BSR L03A6E
  1495.     BSR.S    L05E14
  1496.     LEA    -2(A0),A1
  1497.     MOVE.B    #3,-7(A6,A5.L)
  1498.     MOVE.W    D1,0(A6,A1.L)
  1499.     BRA.S    L05DC6
  1500. BAS_LOR_op ;Basic operator Logical OR
  1501.     BSR.S    L05E5C
  1502.     OR.B    D1,D0
  1503.     BRA.S    L05E58
  1504. BAS_LAND_op ;Basic operator Logical AND
  1505.     BSR.S    L05E5C
  1506.     AND.B    D1,D0
  1507.     BRA.S    L05E58
  1508. BAS_LXOR_op ;Basic operator Logical XOR
  1509.     BSR.S    L05E5C
  1510.     EOR.B    D1,D0
  1511.     BRA.S    L05E58
  1512. L05E54    BSR.S    L05E64
  1513.     NOT.B    D0
  1514. L05E58    BEQ.S    L05E04
  1515.     BRA.S    L05DF4
  1516. L05E5C    ADDQ.W    #6,A1
  1517.     TST.L    -$04(A6,A1.L)
  1518.     SNE    D1
  1519. L05E64    TST.L    2(A6,A1.L)
  1520.     SNE    D0
  1521.     RTS
  1522. BAS_BOR_op ;Basic || bitwise OR (used to be BAS_BOR_Op - MJS)
  1523.     BSR.S    L05E8A
  1524.     OR.W    D0,0(A6,A1.L)
  1525. L05E72    BRA.S    L05E0C
  1526. BAS_BAND_op ;basic && bitwise AND
  1527.     BSR.S    L05E8A
  1528.     AND.W    D0,0(A6,A1.L)
  1529.     BRA.S    L05E0C
  1530. BAS_BXOR_op ;Basic ^^ bitwise EOR
  1531.     BSR.S    L05E8A
  1532.     EOR.W    D0,0(A6,A1.L)
  1533.     BRA.S    L05E0C
  1534. L05E84    NOT.W    0(A6,A1.L)
  1535.     BRA.S    L05E0C
  1536. L05E8A    MOVE.W    0(A6,A1.L),D0
  1537. L05E8E    ADDQ.W    #2,A1
  1538.     RTS
  1539. BAS_MOD_op ;Basic operator MOD (used to be BAS_MOD_Op - MJS)
  1540.     BSR.S    L05EA0
  1541.     MOVE.W    D0,D3
  1542.     BRA.S    L05E9A
  1543. BAS_DIV_op ;Basic operator DIV (used to be BAS_DIV_Op - MJS)
  1544.     BSR.S    L05EA0
  1545. L05E9A    MOVE.W    D3,0(A6,A1.L)
  1546.     BRA.S    L05E72
  1547. L05EA0    MOVE.W    $02(A6,A1.L),D0
  1548.     EXT.L    D0
  1549.     MOVE.W    0(A6,A1.L),D1
  1550.     BEQ.S    L05EC2
  1551.     MOVE.W    D0,D2
  1552.     DIVS    D1,D0
  1553.     MOVE.W    D0,D3
  1554.     SWAP    D0
  1555.     EOR.W    D1,D2
  1556.     BPL.S    L05E8E
  1557.     TST.W    D0
  1558.     BEQ.S    L05E8E
  1559.     ADD.W    D1,D0
  1560.     SUBQ.W    #1,D3
  1561.     BRA.S    L05E8E
  1562. L05EC2    MOVEQ    #-$12,D0
  1563.     ADDQ.W    #4,A7
  1564.     BRA.S    L05E8E
  1565. L05EC8    ANDI.B    #$0F,-$07(A6,A5.L)
  1566.     MOVE.B    -$08(A6,A5.L),D0
  1567.     BEQ.S    L05EE8
  1568.     SUBQ.B    #1,D0
  1569.     BEQ    L05FB4
  1570.     SUBQ.B    #2,D0
  1571.     BLT.S    L05F42
  1572.     BEQ.S    L05EF6
  1573.     SUBQ.B    #3,D0
  1574.     BLT.S    L05EE8
  1575.     SUBQ.B    #1,D0
  1576.     BLE.S    L05F42
  1577. L05EE8    MOVEQ    #$01,D2
  1578.     BSR    L05CBC
  1579.     MOVE.L    A5,BV_NTP(A6)    ;name table running ptr
  1580.     MOVEQ    #-$11,D0
  1581.     RTS
  1582. L05EF6    MOVE.B    -$07(A6,A5.L),D0
  1583.     SUBQ.B    #1,D0
  1584.     BGT.S    L05EE8
  1585.     MOVEA.L    -$04(A6,A5.L),A3
  1586.     ADDA.L    BV_VVBAS(A6),A3    ;variable values
  1587.     MOVEA.L    0(A6,A3.L),A4
  1588.     ADDA.L    BV_VVBAS(A6),A4    ;variable values
  1589.     CMPI.W    #$0001,$04(A6,A3.L)
  1590.     BGT.S    L05EE8
  1591.     MOVE.B    #$01,-$08(A6,A5.L)
  1592.     MOVE.B    #$01,-$07(A6,A5.L)
  1593.     MOVEQ    #0,D1
  1594.     MOVE.W    $06(A6,A3.L),D1
  1595.     BSR.S    L05F30
  1596.     TST.B    D0
  1597.     BEQ.S    L05F80
  1598.     BRA.S    L05F88
  1599. L05F30    MOVEM.L    D0-D1/A0-A1,-(A7)
  1600.     MOVEA.L    A3,A0
  1601.     MOVEQ    #$0A,D1
  1602.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  1603.     MOVEM.L    (A7)+,D0-D1/A0-A1
  1604.     RTS
  1605. L05F42    MOVE.B    -$07(A6,A5.L),D0
  1606.     MOVE.L    -$04(A6,A5.L),D1
  1607.     BLT.S    L05EE8
  1608.     MOVE.B    #$01,-$08(A6,A5.L)
  1609.     MOVEA.L    D1,A4
  1610.     ADDA.L    BV_VVBAS(A6),A4    ;variable values
  1611.     SUBQ.B    #2,D0
  1612.     BLT.S    L05F80
  1613.     BEQ.S    L05F6C
  1614.     MOVEQ    #$02,D1
  1615.     BSR.S    L05FBC
  1616.     SUBQ.W    #2,A1
  1617.     MOVE.W    0(A6,A4.L),0(A6,A1.L)
  1618.     BRA.S    L05FB4
  1619. L05F6C    MOVEQ    #$06,D1
  1620.     BSR.S    L05FBC
  1621.     SUBQ.W    #6,A1
  1622.     MOVE.L    $02(A6,A4.L),$02(A6,A1.L)
  1623.     MOVE.W    0(A6,A4.L),0(A6,A1.L)
  1624.     BRA.S    L05FB4
  1625. L05F80    MOVEQ    #0,D1
  1626.     MOVE.W    0(A6,A4.L),D1
  1627.     ADDQ.W    #2,A4
  1628. L05F88    MOVE.L    D1,-(A7)
  1629.     ADDQ.L    #3,D1
  1630.     BSR.S    L05FBC
  1631.     MOVE.L    (A7),D1
  1632.     BEQ.S    L05FAC
  1633.     ADDQ.L    #1,D1
  1634.     BCLR    #0,D1
  1635.     MOVE.L    D1,D0
  1636.     SUBA.L    D0,A1
  1637. L05F9C    MOVE.B    0(A6,A4.L),0(A6,A1.L)
  1638.     ADDQ.W    #1,A1
  1639.     ADDQ.W    #1,A4
  1640.     SUBQ.L    #1,D0
  1641.     BGT.S    L05F9C
  1642.     SUBA.L    D1,A1
  1643. L05FAC    SUBQ.W    #2,A1
  1644.     ADDQ.W    #2,A7
  1645.     MOVE.W    (A7)+,0(A6,A1.L)
  1646. L05FB4    MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1647.     MOVEQ    #0,D0
  1648.     RTS
  1649. L05FBC    JSR    BV_CHRIX(PC)    ;*/undomodify BSR BV_CHRIX
  1650.     BRA.S    L05FCC
  1651. L05FC2    MOVE.L    A0,-(A7)
  1652.     JSR    L04DF6(PC)    ;*/undomodify BSR L04DF6
  1653.     MOVEA.L    A0,A2
  1654.     MOVEA.L    (A7)+,A0
  1655. L05FCC    MOVEA.L    BV_RIP(A6),A1    ;arith stack
  1656.     RTS
  1657. L05FD2    JSR    L05ABA(PC)    ;*/undomodify BSR L05ABA
  1658.     BNE.S    L06048
  1659.     ANDI.B    #$0F,-$07(A6,A5.L)
  1660.     MOVE.B    -$08(A6,A5.L),D0
  1661.     CMPI.B    #$01,D0
  1662.     BNE.S    L06046
  1663.     MOVE.W    #$FFFF,-$06(A6,A5.L)
  1664.     MOVE.B    #$02,-$08(A6,A5.L)
  1665.     MOVE.B    -$07(A6,A5.L),D0
  1666.     SUBQ.B    #2,D0
  1667.     BLT.S    L06018
  1668.     BEQ.S    L06008
  1669.     MOVEQ    #$02,D1
  1670.     BSR.S    L0604A
  1671.     ADDQ.W    #2,A2
  1672.     ADDQ.W    #2,A1
  1673.     BRA.S    L06042
  1674. L06008    MOVEQ    #$06,D1
  1675.     BSR.S    L0604A
  1676.     MOVE.L    $02(A6,A1.L),$02(A6,A2.L)
  1677.     ADDQ.W    #6,A2
  1678.     ADDQ.W    #6,A1
  1679.     BRA.S    L06042
  1680. L06018    MOVEQ    #$03,D1
  1681.     ADD.W    0(A6,A1.L),D1
  1682.     BCLR    #0,D1
  1683.     BSR.S    L0604A
  1684.     MOVE.W    0(A6,A1.L),D1
  1685.     ADDQ.W    #2,A1
  1686.     ADDQ.W    #2,A2
  1687.     BEQ.S    L06042
  1688.     ADDQ.W    #1,D1
  1689.     BCLR    #0,D1
  1690. L06034    MOVE.W    0(A6,A1.L),0(A6,A2.L)
  1691.     ADDQ.W    #2,A1
  1692.     ADDQ.W    #2,A2
  1693.     SUBQ.W    #2,D1
  1694.     BGT.S    L06034
  1695. L06042    MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1696. L06046    MOVEQ    #0,D0
  1697. L06048    RTS
  1698. L0604A    JSR    L05FC2(PC)    ;*/undomodify BSR L05FC2
  1699.     MOVE.L    A2,D2
  1700.     SUB.L    BV_VVBAS(A6),D2    ;variable values
  1701.     MOVE.L    D2,-$04(A6,A5.L)
  1702.     MOVE.W    0(A6,A1.L),0(A6,A2.L)
  1703.     RTS
  1704. CAL_FNBAs ;call BASIC function
  1705.     MOVEA.L    A3,A2
  1706.     BSR.S    L06094
  1707.     MOVE.B    1(A6,A2.L),-7(A6,A5.L)
  1708.     BSR.S    L060A6
  1709.     BNE.S    L06074
  1710.     ADDQ.W    #2,A0
  1711.     MOVEQ    #2,D5
  1712.     BRA.S    L06076
  1713. L06074:
  1714.     MOVEQ    #3,D5
  1715. L06076:
  1716.     MOVEA.L    A0,A4
  1717.     MOVE.L    D0,D4
  1718.     SUBA.L    BV_TKBAS(A6),A0    ;token list
  1719.     MOVE.L    A0,-(A7)
  1720.     LEA    L04BFA(PC),A0    ;*/modify LEA L04BFA,A0
  1721.     nop            ;*/modify
  1722.     MOVE.L    A0,-(A7)
  1723. ; --------------------------------------------------------------
  1724. */beginoverlay
  1725.     LEA    o0A8EA(PC),A0    ;*/modify LEA L0A8EA,A0
  1726.     nop            ;*/filling
  1727. */endoverlay
  1728. ; --------------------------------------------------------------
  1729.     MOVE.L    A0,-(A7)
  1730.     BRA    L094CA
  1731. ; initialize entry in name table
  1732. L06094:
  1733.     CLR.W    0(A6,A5.L)
  1734.     MOVE.W    #$FFFF,2(A6,A5.L)
  1735.     CLR.L    4(A6,A5.L)
  1736.     ADDQ.W    #8,A5
  1737.     RTS
  1738. L060A6    CMPI.B    #$80,0(A6,A0.L)
  1739.     BNE.S    L060B0
  1740.     ADDQ.W    #2,A0
  1741. L060B0    CMPI.W    #$8405,0(A6,A0.L)
  1742.     RTS
  1743. CAL_FN68k ;call machine code function
  1744.     BSR.S    L06094
  1745.     MOVE.L    A5,D0
  1746.     SUB.L    BV_NTBAS(A6),D0    ;name table
  1747.     MOVE.L    D0,-(A7)
  1748.     MOVE.L    4(A6,A3.L),-(A7)
  1749.     BSR.S    L060A6
  1750.     BEQ.S    L060CC
  1751.     BRA.S    L060DE
  1752. L060CC:
  1753.     ADDQ.W    #2,A0
  1754.     JSR    L0614A(PC)    ;*/undomodify BSR.S L0614A
  1755.                 ;*/undomodify nop
  1756.     BNE.S    L06144
  1757.     CMPI.W    #$8406,0(A6,A0.L)
  1758.     BNE.S    L06142        ;error in expression
  1759.     ADDQ.W    #2,A0
  1760. L060DE:
  1761.     MOVEA.L    (A7)+,A2
  1762.     MOVEA.L    BV_NTBAS(A6),A3    ;name table
  1763.     MOVE.L    A5,D0
  1764.     SUB.L    A3,D0
  1765.     ADDA.L    (A7),A3
  1766.     MOVE.L    D0,-(A7)
  1767.     SUBA.L    BV_TKBAS(A6),A0    ;token list
  1768.     MOVEA.L    BV_RIP(A6),A1    ;arith stack
  1769.     SUBA.L    BV_RIBAS(A6),A1    ;arith stack running ptr
  1770.     MOVEM.L    D5-D7/A0-A1,-(A7)
  1771.     JSR    (A2)        ;call machinecode Function
  1772.     MOVE.L    D0,D2        ;*********** Function
  1773.                 ;return ***********
  1774.     MOVEM.L    (A7)+,D5-D7/A0-A1
  1775.     ADDA.L    BV_TKBAS(A6),A0    ;token list
  1776.     BEQ.S    L06112
  1777.     ADDA.L    BV_RIBAS(A6),A1    ;arith stack running ptr
  1778.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1779. L06112    MOVEA.L    BV_RIP(A6),A1    ;arith stack
  1780.     MOVEA.L    BV_NTBAS(A6),A5    ;name table
  1781.     MOVEA.L    A5,A3
  1782.     ADDA.L    (A7)+,A5
  1783.     ADDA.L    (A7)+,A3
  1784.     MOVE.L    A0,-(A7)
  1785.     MOVE.L    A3,-(A7)
  1786.     JSR    STO_VARValue(PC)    ;*/undomodify BSR STO_VARValue
  1787.     MOVEA.L    (A7)+,A5
  1788.     MOVE.L    D2,D0
  1789.     BNE.S    L06146
  1790.     MOVE.B    D4,-7(A6,A5.L)
  1791.     MOVE.B    #1,-8(A6,A5.L)
  1792.     CLR.L    -4(A6,A5.L)
  1793.     MOVEA.L    (A7)+,A0
  1794.     MOVEQ    #0,D0
  1795.     RTS
  1796. L06142    MOVEQ    #-17,D0        ;error in expression
  1797. L06144    ADDQ.W    #4,A7
  1798. L06146    ADDQ.W    #4,A7
  1799.     RTS
  1800. L0614A    ;calculate and store value of a function
  1801.     MOVE.L    D3,-(A7)
  1802.     MOVE.L    D4,-(A7)
  1803.     SF    D4
  1804. L06150    JSR    L05FD2(PC)    ;*/undomodify BSR L05FD2
  1805.     BLT.S    L061B6
  1806.     BGT.S    L06162
  1807.     MOVE.B    0(A6,A0.L),D0
  1808.     MOVE.W    0(A6,A0.L),D1
  1809.     BRA.S    L0618C
  1810. L06162    MOVE.B    0(A6,A0.L),D0
  1811.     MOVE.W    0(A6,A0.L),D1
  1812.     CMPI.B    #$8E,D0
  1813.     BEQ.S    L0617C
  1814.     CMPI.W    #$8403,D1
  1815.     BNE.S    L061AA
  1816.     ST    D4
  1817.     ADDQ.W    #2,A0
  1818.     BRA.S    L06150
  1819. L0617C    CLR.W    0(A6,A5.L)
  1820.     MOVE.W    #$FFFF,$02(A6,A5.L)
  1821.     CLR.L    $04(A6,A5.L)
  1822.     ADDQ.W    #8,A5
  1823. L0618C    MOVE.L    A5,BV_NTP(A6)    ;name table running ptr
  1824.     CMPI.B    #$8E,D0
  1825.     BNE.S    L061AA
  1826.     TST.B    D4
  1827.     BEQ.S    L0619E
  1828.     BSET    #$03,D1
  1829. L0619E    SF    D4
  1830.     ADDQ.W    #2,A0
  1831.     LSL.B    #4,D1
  1832.     OR.B    D1,-$07(A6,A5.L)
  1833.     BRA.S    L06150
  1834. L061AA    TST.B    D4
  1835.     BEQ.S    L061B4
  1836.     BSET    #$07,-$07(A6,A5.L)
  1837. L061B4    MOVEQ    #0,D0
  1838. L061B6    MOVE.L    (A7)+,D4
  1839.     MOVE.L    (A7)+,D3
  1840.     TST.L    D0
  1841.     RTS
  1842. ; ------------------------------------------------------------
  1843. ;       Getting parameters for machinecode procedures
  1844. ;     the following routines check for one parameter only !
  1845. ; ------------------------------------------------------------
  1846. GET_INT2:
  1847.     BSR.S    CA_GTINT
  1848.     BRA.S    L061CC
  1849. GET_INT4:
  1850.     BSR.S    CA_GTLIN
  1851.     BRA.S    L061CC
  1852. GET_REAL:
  1853.     BSR.S    CA_GTFP
  1854.     BRA.S    L061CC
  1855. GET_STR:
  1856.     BSR.S    CA_GTSTR
  1857. L061CC    BNE.S    L061D4
  1858.     SUBQ.W    #1,D3
  1859.     BEQ.S    L061D4
  1860.     MOVEQ    #-15,D0        ;bad parameter error
  1861. L061D4    RTS
  1862. CA_GTSTR:
  1863.     MOVEQ    #1,D0
  1864.     BRA.S    L061E6
  1865. CA_GTINT:
  1866.     MOVEQ    #3,D0
  1867.     BRA.S    L061E6
  1868. CA_GTFP:
  1869.     MOVEQ    #2,D0
  1870.     BRA.S    L061E6
  1871. CA_GTLIN:
  1872.     MOVEQ    #5,D0
  1873.     ROR.L    #1,D0        ;!!! Really neccessary ???
  1874.                 ;!!!
  1875. L061E6    MOVEM.L    D5/A4-A5,-(A7)
  1876.     MOVE.L    A3,-(A7)
  1877.     MOVE.L    D0,-(A7)
  1878.     MOVEQ    #0,D5
  1879. L061F0    CMPA.L    $0004(A7),A5
  1880.     BLE.S    L06228
  1881.     MOVEQ    #$0F,D6
  1882.     AND.B    -$07(A6,A5.L),D6
  1883.     MOVE.B    D6,-$07(A6,A5.L)
  1884.     JSR    L05EC8(PC)    ;*/undomodify BSR L05EC8
  1885.     BNE.S    L0622A
  1886.     MOVE.L    (A7),D0
  1887.     JSR    L05996(PC)    ;*/undomodify BSR L05996
  1888.     MOVE.B    D6,-$07(A6,A5.L)
  1889.     TST.L    D0
  1890.     BNE.S    L0622A
  1891.     TST.L    (A7)
  1892.     BPL.S    L06222
  1893.     JSR    L047AA(PC)    ;*/undomodify BSR L047AA
  1894.     BNE.S    L0622A
  1895.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  1896. L06222    ADDQ.W    #1,D5
  1897.     SUBQ.W    #8,A5
  1898.     BRA.S    L061F0
  1899. L06228    MOVEQ    #0,D0
  1900. L0622A    ADDQ.W    #4,A7
  1901.     MOVE.L    D5,D3
  1902.     MOVEA.L    (A7)+,A3
  1903.     MOVEM.L    (A7)+,D5/A4-A5
  1904.     TST.L    D0
  1905.     RTS
  1906. L06238    ;evaluate characteristics of a table
  1907.     ANDI.B    #$0F,-7(A6,A5.L)
  1908.     MOVEA.L    -4(A6,A5.L),A4
  1909.     ADDA.L    BV_VVBAS(A6),A4    ;variable values
  1910.     MOVEA.L    A4,A2
  1911.     MOVE.L    0(A6,A4.L),D6
  1912.     MOVE.W    4(A6,A4.L),D4
  1913.     ADDQ.W    #6,A4
  1914.     RTS
  1915. L06254    ;store the characteristics evaluated above
  1916.     SUBA.L    BV_VVBAS(A6),A2    ;variable values
  1917.     SUBA.L    BV_VVBAS(A6),A4    ;variable values
  1918.     MOVEM.L    A2/A4-A5,-(A7)
  1919.     JSR    L05A82(PC)    ;*/undomodify BSR L05A82
  1920.     MOVEM.L    (A7)+,A2/A4-A5
  1921.     ADDA.L    BV_VVBAS(A6),A4    ;variable values
  1922.     ADDA.L    BV_VVBAS(A6),A2    ;variable values
  1923.     RTS
  1924. L06272    BSR.S    L06238
  1925. L06274    MOVEQ    #0,D5
  1926.     BSR.S    L06254
  1927.     BLT.S    L062D0
  1928.     BEQ.S    L06288
  1929.     CMPI.W    #$8E05,0(A6,A0.L)
  1930.     BEQ.S    L06292
  1931. L06284    MOVEQ    #-$11,D0
  1932.     BRA.S    L062D0
  1933. L06288    ADDQ.L    #2,BV_RIP(A6)    ;arith stack
  1934.     MOVE.W    0(A6,A1.L),D5
  1935.     BLT.S    L062CE
  1936. L06292    CMP.W    0(A6,A4.L),D5
  1937.     BGT.S    L062CE
  1938.     MOVE.W    D5,D0
  1939.     MULU    2(A6,A4.L),D0
  1940.     MOVE.B    -7(A6,A5.L),D1
  1941.     SUBQ.B    #2,D1
  1942.     BLT.S    L062B0
  1943.     BEQ.S    L062AC
  1944.     ADD.L    D0,D0
  1945.     BRA.S    L062B0
  1946. L062AC    MULU    #6,D0
  1947. L062B0    ADD.L    D0,D6
  1948.     MOVEQ    #0,D0
  1949.     MOVE.L    D6,0(A6,A2.L)
  1950.     CMPI.W    #$8E05,0(A6,A0.L)
  1951.     BNE.S    L062E6
  1952.     ADDQ.W    #2,A0
  1953.     BSR.S    L06254
  1954.     BLT.S    L062D0
  1955.     BEQ.S    L062D4
  1956.     MOVE.W    0(A6,A4.L),D0
  1957.     BRA.S    L062E2
  1958. L062CE    MOVEQ    #-4,D0
  1959. L062D0    BRA    L063CE
  1960. L062D4    ADDQ.L    #2,BV_RIP(A6)    ;arith stack
  1961.     MOVE.W    0(A6,A1.L),D0
  1962.     CMP.W    0(A6,A4.L),D0
  1963.     BGT.S    L062CE
  1964. L062E2    SUB.W    D5,D0
  1965.     BLT.S    L062CE
  1966. L062E6    MOVE.W    D0,0(A6,A4.L)
  1967.     ADDQ.W    #4,A4
  1968.     SUBQ.W    #1,D4
  1969.     BNE.S    L0632A
  1970.     CMPI.B    #$01,-$07(A6,A5.L)
  1971.     BGT.S    L0632A
  1972.     BEQ.S    L06308
  1973.     SUBQ.L    #1,0(A6,A2.L)
  1974.     ADDQ.W    #1,-$04(A6,A4.L)
  1975.     TST.W    D5
  1976.     BEQ.S    L062CE
  1977.     BRA.S    L0632A
  1978. L06308    CLR.B    -$07(A6,A5.L)
  1979.     ADDQ.W    #1,-$04(A6,A4.L)
  1980.     ADDQ.L    #1,0(A6,A2.L)
  1981.     TST.W    D5
  1982.     BNE.S    L0632A
  1983.     TST.W    D0
  1984.     BNE.S    L062CE
  1985.     SUBQ.L    #1,0(A6,A2.L)
  1986.     SUBQ.W    #1,-$04(A6,A4.L)
  1987.     MOVE.B    #3,-7(A6,A5.L)
  1988. L0632A    MOVE.W    0(A6,A0.L),D0
  1989.     ADDQ.W    #2,A0
  1990.     CMPI.W    #$8406,D0
  1991.     BEQ.S    L06346
  1992.     CMPI.W    #$8E01,D0
  1993.     BNE    L06284
  1994.     TST.W    D4
  1995.     BGT    L06274
  1996.     BRA.S    L062CE
  1997. L06346    BSR    L06238
  1998.     MOVEA.L    (A6),A3
  1999.     MOVE.L    0(A6,A2.L),0(A6,A3.L)
  2000.     ADDQ.W    #6,A3
  2001.     MOVEQ    #0,D0
  2002. L06356    TST.W    0(A6,A4.L)
  2003.     BEQ.S    L06366
  2004.     MOVE.L    0(A6,A4.L),0(A6,A3.L)
  2005.     ADDQ.W    #4,A3
  2006.     ADDQ.W    #1,D0
  2007. L06366    ADDQ.W    #4,A4
  2008.     SUBQ.W    #1,D4
  2009.     BGT.S    L06356
  2010.     MOVEA.L    (A6),A3
  2011.     MOVE.W    D0,4(A6,A3.L)
  2012.     MOVE.W    4(A6,A2.L),D1
  2013.     LSL.L    #2,D1
  2014.     ADDQ.W    #6,D1
  2015.     MOVE.L    A0,-(A7)
  2016.     MOVE.L    A3,-(A7)
  2017.     MOVEA.L    A2,A0
  2018.     JSR    L04FE8(PC)    ;*/undomodify BSR L04FE8
  2019.     MOVEA.L    (A7)+,A3
  2020.     MOVEA.L    (A7)+,A0
  2021.     MOVE.W    $04(A6,A3.L),D1
  2022.     BGT.S    L063A2
  2023.     TST.B    -7(A6,A5.L)
  2024.     BEQ.S    L063A2
  2025.     MOVE.L    0(A6,A3.L),-4(A6,A5.L)
  2026.     MOVE.B    #2,-8(A6,A5.L)
  2027.     BRA.S    L063CC
  2028. L063A2    LSL.L    #2,D1
  2029.     ADDQ.W    #6,D1
  2030.     MOVE.L    A0,-(A7)
  2031.     MOVE.L    A3,-(A7)
  2032.     JSR    L04DF6(PC)    ;*/undomodify BSR L04DF6
  2033.     MOVEA.L    A0,A2
  2034.     MOVEA.L    (A7)+,A3
  2035.     MOVEA.L    (A7)+,A0
  2036.     MOVE.L    A2,D0
  2037.     SUB.L    BV_VVBAS(A6),D0    ;variable values
  2038.     MOVE.L    D0,-$04(A6,A5.L)
  2039. L063BE    MOVE.W    0(A6,A3.L),0(A6,A2.L)
  2040.     ADDQ.W    #2,A3
  2041.     ADDQ.W    #2,A2
  2042.     SUBQ.L    #2,D1
  2043.     BGT.S    L063BE
  2044. L063CC    MOVEQ    #0,D0
  2045. L063CE    RTS
  2046. L063D0    ;evaluate substring of type x$(4 TO 8)
  2047.     MOVEM.L    D5-D6/A2/A4,-(A7)
  2048.     CMPI.B    #1,-8(A6,A5.L)
  2049.     BEQ.S    L063EE
  2050.     MOVE.L    -4(A6,A5.L),D0
  2051.     BLT.S    L063EA
  2052.     MOVEA.L    BV_VVBAS(A6),A2    ;variable values
  2053.     ADDA.L    D0,A2
  2054.     BRA.S    L06404
  2055. L063EA    MOVEQ    #-$11,D0
  2056.     BRA.S    L0643E
  2057. L063EE    MOVE.L    A0,-(A7)
  2058.     JSR    L05A34(PC)    ;*/undomodify BSR L05A34
  2059.     MOVEQ    #0,D7
  2060.     MOVE.L    A1,BV_RIP(A6)    ;arith stack
  2061.     MOVEA.L    A0,A2
  2062.     MOVEA.L    (A7)+,A0
  2063.     MOVE.L    A2,D0
  2064.     SUB.L    BV_VVBAS(A6),D0    ;variable values
  2065. L06404    MOVE.L    D0,-(A7)
  2066.     BSR.S    L06446
  2067.     MOVEA.L    BV_VVBAS(A6),A2    ;variable values
  2068.     ADDA.L    (A7)+,A2
  2069.     BNE.S    L06420
  2070.     MOVEA.L    A2,A4
  2071.     ADDQ.W    #2,A4
  2072.     SUBQ.W    #1,D5
  2073.     ADDA.W    D5,A4
  2074.     MOVE.W    D6,D1
  2075.     SUB.W    D5,D1
  2076.     JSR    L05F88(PC)    ;*/undomodify BSR L05F88
  2077. L06420    MOVE.L    D0,-(A7)
  2078.     CMPI.B    #1,-8(A6,A5.L)
  2079.     BNE.S    L06434
  2080.     MOVE.L    A0,-(A7)
  2081.     MOVEA.L    A2,A0
  2082.     JSR    L05A66(PC)    ;*/undomodify BSR L05A66
  2083.     MOVEA.L    (A7)+,A0
  2084. L06434    MOVE.L    (A7)+,D0
  2085.     BNE.S    L0643E
  2086.     MOVE.B    #$01,-$08(A6,A5.L)
  2087. L0643E    MOVEM.L    (A7)+,D5-D6/A2/A4
  2088.     TST.L    D0
  2089.     RTS
  2090. L06446    MOVE.W    0(A6,A2.L),-(A7)
  2091.     JSR    L05A82(PC)    ;*/undomodify BSR L05A82
  2092.     BLT.S    L06496
  2093.     BGT.S    L0649E
  2094.     ADDQ.L    #2,BV_RIP(A6)    ;arith stack
  2095.     MOVE.W    0(A6,A1.L),D5
  2096.     BLE.S    L0649E
  2097.     CMP.W    (A7),D5
  2098.     BGT.S    L0649E
  2099.     MOVE.W    D5,D6
  2100.     CMPI.W    #$8E05,0(A6,A0.L)
  2101.     BNE.S    L06482
  2102.     ADDQ.W    #2,A0
  2103.     JSR    L05A82(PC)    ;*/undomodify BSR L05A82
  2104.     BLT.S    L06496
  2105.     BGT.S    L06480
  2106.     ADDQ.L    #2,BV_RIP(A6)    ;arith stack
  2107.     MOVE.W    0(A6,A1.L),D6
  2108.     CMP.W    (A7),D6
  2109.     BLE.S    L06482
  2110. L06480    MOVE.W    (A7),D6
  2111. L06482    MOVE.W    D6,D0
  2112.     ADDQ.W    #1,D0
  2113.     SUB.W    D5,D0
  2114.     BLT.S    L0649E
  2115.     CMPI.W    #$8406,0(A6,A0.L)
  2116.     BNE.S    L0649A
  2117.     ADDQ.W    #2,A0
  2118.     MOVEQ    #0,D0
  2119. L06496    ADDQ.W    #2,A7
  2120.     RTS
  2121. L0649A    MOVEQ    #-17,D0        ;error in expression
  2122.     BRA.S    L06496
  2123. L0649E    MOVEQ    #-4,D0        ;out of range
  2124.     BRA.S    L06496
  2125. ; --------------------------------------------------------------
  2126. ;*/endfile
  2127.